kexue shangwang


根據實踐,pptp、IPsec甚至OpenVPN等kexue上網法已經無法順利翻越GFW。通過抓包可知,GFW會將pptp的握手期間的ack包吞掉,導致本地一直無法收到服務器端的響應。而OpenVPN也是類似的情況。目前比較可行的上網法就是將OpenVPN的數據包進行混淆,封裝成其它協議發送到服務端再解釋,這時候就需要用到Obfsproxy。基本原理如下圖:

OpenVPN with Obfsproxy

筆者的軟硬件環境如下:

Server:

  • 東京機房VPS
  • CentOS 6.5 32-bit

Client:

  • Win 8.1

 

基本步驟如下:

  • Server端安裝Obfsproxy
  • Server端安裝OpenVPN
  • Client端安裝Obfsproxy
  • Client端安裝OpenVPN

 

基本軟件環境要求:

Server端:

  • Python2.7或以上版本(Obfsproxy需要Python2.7或以上的支持),對於CentOS 6.5或其它無法通過官方途徑升級Python的系統,可以參考CentOS 下升級Python這篇文章。對於其中部分Python2.7的版本(Python 2 <2.7.9),請確保pip已正常安裝及正常運行。
  • OpenSSL及OpenSSL-devel。

 

Server端安裝Obfsproxy:

  • 安裝Obfsproxy
    pip2 install obfsproxy

    此處使用pip還是pip2視具體系統環境而定。

  • 配置Obfsproxy
    將以下命令

     

    /usr/local/bin/obfsproxy obfs2 --dest=127.0.0.1:[server端openvpn所用端口號] server 0.0.0.0: [server端obfsproxy所用端口號]

     

    添加到/etc/rc.local中,以便開機啟動obfsproxy。其中“/usr/local/bin/obfsproxy”應替換成具體運行環境中obfsproxy的絕對路徑,否則可能無法開機啟動。

 

Server端安裝OpenVPN:

  • 運行命令:
    1. yum install epel-release

       

  • 安裝OpenVPN
    1. yum install openvpn easy-rsa -y

       

    首先安裝openvpn和easy-rsa。其中,easy-rsa用於生成安全密鑰。

  • 配置OpenVPN
    將OpenVPN配置文件樣板復制到OpenVPN目錄下:

     

    1. cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

       

    編輯/etc/openvpn/server.conf:

     

    port [server端openvpn所用端口號] #使用的端口號,默認為1194,可以不更改
    proto tcp #obfsproxy只支持tcp協議,因此只能設置為tcp
    dev tun
    ca ca.crt #證書、密鑰文件
    cert server.crt
    key server.key
    dh dh2048.pemserver 192.168.200.0 255.255.255.0
    push "redirect-gateway def1 bypass-dhcp"
    #以下命令用於設置客戶端DNS,是具體情況而定,一般設置為Google DNS
    push "dhcp-option DNS 8.8.4.4"
    push "dhcp-option DNS 8.8.8.8"
    keepalive 20 120
    #設置openvpn運行后權限
    user nobody
    group nobody
    persist-key
    persist-tun
    status openvpn-status.log
    verb 5
    

      

  • 生成密鑰與證書
    創建密鑰存放目錄:

     

    mkdir -p /etc/openvpn/easy-rsa/keys

     

    將生成腳本復制到上面建立的目錄中:

    cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

     

    編輯生成腳本的基本環境變量(非開放VPN可忽略大多數參數):

    vi /etc/openvpn/easy-rsa/vars

     

    將KEY_NAME編輯為server
    同步OpenSSL配置:

    cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

     

    開始生成:

     

    cd /etc/openvpn/easy-rsa
    source ./vars
    ./clean-all
    ./build-ca
    ./build-key-server server
    ./build-dh
    

      

    將證書與密鑰移動到openvpn目錄下:

    cd /etc/openvpn/easy-rsa/keys
    cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

     

    生成Client端證書:

    cd /etc/openvpn/easy-rsa
    ./build-key client

     

  • 路由設置
    添加iptables規則(以下命令僅做參考,請確保openvpn及obfsproxy所使用的端口不被iptables禁止):

     

    iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth0 -j MASQUERADE

     

    保存,重啟刷新規則:

    service iptables save
    service iptables restart

     

    設置允許轉發:
    vi /etc/sysctl.conf

    修改:ipv4.ip_forward = 1
    刷新:sysctl –p

     


    開啟openvpn服務及設置其開機啟動

    service openvpn start
    chkconfig openvpn on

     

  • 將證書與密鑰復制到客戶端
    需要復制的文件有:

     

    /etc/openvpn/easy-rsa/keys/ca.crt
    /etc/openvpn/easy-rsa/keys/client.crt
    /etc/openvpn/easy-rsa/keys/client.key

     

至此,服務端配置工作完成。進入客戶端配置。

 

Client端安裝Obfsproxy

  • 下載Windows版obfsproxy
  • 配置obfsproxy
    運行命令:

     

    obfsproxy.exe obfs2 socks 127.0.0.1: [client端obfsproxy所用端口號]

     

    保持運行此程序。

  • *將obfsproxy配置成Windows服務
    可以使用C#編寫一個基本服務來啟動obfsproxy,編寫方法此處不累述。

 

Client端安裝OpenVPN

  • 下載OpenVPN for Windows
  • 配置client端:
    新建ovpn文件並編輯內容如下:

     

    client
    dev tun
    proto tcp
    remote [server地址] [server端obfsproxy所用端口號]
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    verb 5
    ca ca.crt
    cert client.crt
    key client.key
    socks-proxy-retry
    socks-proxy 127.0.0.1 [client端obfsproxy所用端口號]
    

      

     

     
    • 將剛才下載的證書、密鑰與此配置文件移動到OpenVPN安裝目錄下的config文件夾
    • 使用OpenVPN GUI進行連接

實例配置:

[root@east-usa01 ~]# cat /etc/openvpn/server.conf |grep -v "^#"|grep -v "^;"|grep -v "^$"
local 47.****.224
port 1194
proto udp
dev tun
ca ca.crt
cert huanqiuvpn.crt
key huanqiuvpn.key  # This file should be kept secret
dh dh1024.pem
server 10.8.200.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 8.8.8.8"
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM