月度归档: 2022 年 6 月

  • Ubuntu 搭建gfw路由器

    用了七八年的华硕AC68U突然间没了信号,没辙只能再买一个,618看红米的AX3000只要一百多,就下手买了一台。到手以后才发现是256MB内存版本的,也不好装openwrt,就此作罢。在家有个无障碍的网络环境很重要,于是就想到用一台装了Ubuntu的笔记本来做NAT服务器,实现以前在路由器上同样的功能。

    首先安装openconnect以及dnsmasq,ipset

    sudo apt install dnsmasq ipset openconnect

    编辑/etc/sysctl.conf ,将net.ipv4.ip_forward=1,编辑完成后执行sysctl -p 以便生效

    在/root/bin/下面创建ocserv.sh文件,

    _server 为ocserv服务器地址,

    _cert为服务器ssl证书的hash,如果不知道执行一次openconnec连接就可以看到。

    _ocserv_passwd 为密码

    #!/bin/sh
    export GOGC=20
    _server='xxx.xxx.xx.xxx:1234'
    _cert="pin-sha256:KAEiO0Yfdsjojojijlkjiohjjwohoa;jhl="
    _ocserv_passwd="fs2all"
    log()
    {
    
    _date=`date`
    
    echo ${_date} ' - ' $*
    }
    
    
    
    Check_internet()
    {
    _wc=`ifconfig |grep ppp0|wc -l`
    
    if [ $_wc -eq 0 ]
    then
    log "No internet Connect, exiting"
    exit
    fi
    }
    
    Check_VPN_PROC()
    {
    _wc=`ps -ef|grep openconnect|grep -v grep|wc -l`                                                                                                                                               
    if [ $_wc -eq 0 ]                    
    then       
    date                                                                                                      
    echo $_ocserv_passwd |openconnect -b --authgroup=yourgroup--servercert $_cert  -u username $_server
    log "Start openconnect connection."
    sleep 5
    fi
    }
    
    
    
    
    Check_VPN_Conn()
    {
    _wc=`ifconfig |grep tun0|wc -l`
                     
    if [ $_wc -eq 0 ]      
    then
    log "No VPN Connection, exiting."                   
    exit
    fi
    }
    
    Check_timeout()
    {
    ping -c 5 192.168.8.1 > 1.tmp
    P1=$(cat 1.tmp| grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }')
    if [ $P1 -gt 80 ]
    then
    cat 1.tmp
    log "VPN Connection timeout, kill Openconnect. "
    pid=`ps |grep openconnect |grep authgroup|awk '{print $1}'`
    if [ $pid"x" != "x" ]
            then
            kill $pid
    fi
    
    
    
    fi
    }
    
    Check_Dnsmasq()
    {
    _wc=`ps |grep dnsmasq|wc -l`
    
    if [ $_wc -eq 1 ]
    then
    log "Restart Dnsmasq."
    dnsmasq --log-async
    fi
    }
    
    Check_dns_route()
    {
    _wc=`ip route |grep 1.1.1.1|wc -l`       
                   
    if [ $_wc -eq 0 ]
    then     
    log "Add DNS IP Route."                            
    ip route add 1.1.1.1 dev tun0
    fi 
    }
    
    Check_ipset()
    {
    modprobe xt_set
    
    _wc=`ipset list |grep gfwlist |wc -l`
    
    if [ $_wc -eq 0 ] 
    then
    log "Create ipset"
    ipset -N gfwlist iphash
    ipset -N gfwlist_V6 iphash family inet6
    fi
    }
    
    
    Check_iptables()
    {
    _wc=`iptables -t mangle -L |grep 'Chain fwmark (2 references)'|wc -l`
     
    if [ $_wc -eq 0 ]
    then
    log "create iptables mangle table rules"
    iptables -t mangle -N fwmark
    iptables -t mangle -F
    iptables -t mangle -A PREROUTING -j fwmark
    iptables -t mangle -A OUTPUT -j fwmark
    iptables -t mangle -A fwmark -m set --match-set gfwlist dst -j MARK --set-mark 1
    
    #ip6tables -t mangle -N fwmark
    #ip6tables -t mangle -F   
    #ip6tables -t mangle -A fwmark -m set --match-set gfwlist_V6 dst -j MARK --set-mark 1
    
    fi
    }
    
    Check_ip_rule()
    {
    
    _wc=`ip rule |grep 'fwmark 0x1'|wc -l`
                           
    if [ $_wc -eq 0 ]      
    then       
    log "Create ip rule forward rule"            
    ip rule add prio 100 fwmark 1 table 100
    #ip -6 rule add prio 100 fwmark 1 table 100
    fi 
    
    
    
    _wc=`ip route show table 100 |wc -l`
    
    if [ $_wc -eq 0 ]
    then
    log "Create ip route rule"
    #ip route add table 100 default dev tun0
    ip route add default via 192.168.8.1 table 100
    #ip route add table 100 via 192.168.8.1 dev tun0
    #ip -6 route add default via 2001:470:66:2e8::1 table 100
    fi
    }
    
    Check_MASQUERADE()
    {
    _wc=`iptables -t nat -nvL |grep MASQUERADE |grep 192.168.1.0 |wc -l`
    
    if [ $_wc -eq 0 ]
    then
    log "Create nat rule"
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
    fi
    }
    
    
    
    
    
    ################Start execution#############
    
    # Add_Crontab
    
    # Check_vlm_PROC
    #Check_internet
    Check_timeout
    #Check_KCPTUN
    Check_VPN_PROC
    Check_VPN_Conn
    Check_timeout
    Check_Dnsmasq
    Check_dns_route
    Check_ipset
    Check_iptables
    Check_ip_rule
    Check_MASQUERADE
    

    执行完脚本,然后设备的网关和dns指向服务器地址即可。

  • Confluence 使用tar.gz手工更新版本

    突然收到一个阿里云的短信,提示服务器上有异常,登录一看,又是confluence用户有执行可疑shell命令,没得讲,肯定又是confluence出新漏洞了,赶紧上线把服务停掉,然后登录官网一看,果然发布了新版本,更新几个高危的安全漏洞。

    用常规的bin文件更新居然不行,没辙,只要用tar.gz 手工更新。

    把原来/opt目录下的confluence改名为confluence.bak,并且把/var下的数据文件备份。然后将新下载的安装包解压到原来相同路径下。

    confluence.bak/confluence/WEB-INF/classes/* 所有文件需要复制到新文件夹同路径下。

    /opt/atlassian/confluence.bak/bin 所有文件需要复制到新文件夹同路径下。

    /opt/atlassian/confluence.bak/conf 所有文件需要复制到新文件夹同路径下。

    删除原有数据文件的索引,待新版本启用后重建索引

    /var/atlassian/application-data/confluence/journal

    /var/atlassian/application-data/confluence/index

    否则会报错:

    confluence constructor threw exception; nested exception is java.lang.numberformatexception: for input string: “4a.locked

    使用原有命令启动服务即可,如果到了新服务器设立的页面,也不用惊慌,把备份的confluence.cfg.xml恢复到原路径即可。

    /var/atlassian/application-data/confluence/confluence.cfg.xml

  • Confluence 使用tar.gz手工更新版本

    突然收到一个阿里云的短信,提示服务器上有异常,登录一看,又是confluence用户有执行可疑shell命令,没得讲,肯定又是confluence出新漏洞了,赶紧上线把服务停掉,然后登录官网一看,果然发布了新版本,更新几个高危的安全漏洞。

    用常规的bin文件更新居然不行,没辙,只要用tar.gz 手工更新。

    把原来/opt目录下的confluence改名为confluence.bak,并且把/var下的数据文件备份。然后将新下载的安装包解压到原来相同路径下。

    confluence.bak/confluence/WEB-INF/classes/* 所有文件需要复制到新文件夹同路径下。

    /opt/atlassian/confluence.bak/bin 所有文件需要复制到新文件夹同路径下。

    /opt/atlassian/confluence.bak/conf 所有文件需要复制到新文件夹同路径下。

    删除原有数据文件的索引,待新版本启用后重建索引

    /var/atlassian/application-data/confluence/journal

    /var/atlassian/application-data/confluence/index

    否则会报错:

    confluence constructor threw exception; nested exception is java.lang.numberformatexception: for input string: “4a.locked

    使用原有命令启动服务即可,如果到了新服务器设立的页面,也不用惊慌,把备份的confluence.cfg.xml恢复到原路径即可。

    /var/atlassian/application-data/confluence/confluence.cfg.xml