由於OpenVPN的證書方式采用了TLS握手機制,而TLS已經受到嚴重干擾(不論是TCP還是UDP),已不能在在國內使用。但OpenVPN還可以采用靜態密鑰(static-key)的方式,相對於證書方式,static-key不需要TLS握手,不易被干擾,缺點也顯而易見,那就是只能配置一對一的網絡,如果要配置一對多的網絡,需要啟動多個OpenVPN進程。
一、服務端設置
生成static-key,並在配置文件中啟用之
復制代碼代碼如下:
$ openvpn --genkey --secret static.key
然後把static.key和主配置文件放入同一目錄
復制代碼代碼如下:
$ vim /etc/openvpn/server.conf #配置主配置文件如下
dev tun
port 8899
;proto tcp-server
ifconfig 10.152.10.1 10.152.10.2
secret static.key
keepalive 10 60
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 4
push "redirect-gateway def1 bypass-dhcp"
由於OpenVPN默認使用UDP的方式傳輸,如果想改用TCP方式,需要加上“proto tcp-server”一行(這裡未啟用,已經使用分號注釋掉了);這裡我去掉了push dns的配置項,因為客戶端總是無法接收到PUSH過來的dns option,原因未知,所以干脆把DNS寫進客戶端的配置文件算了。
復制代碼代碼如下:
$ iptables -t nat -A POSTROUTING -s 10.152.10.0/24 -j SNAT --to-source 公網ip
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
啟動OpenVPN服務
復制代碼代碼如下:
$ /usr/sbin/openvpn --config /etc/openvpn/server.conf > /dev/null 2>&1 &
二、客戶端設置
僅需要把client.ovpn和static.key文件放入OpenVPN的config目錄中即可
編輯客戶端配置文件(一般為.ovpn結尾)
復制代碼代碼如下:
remote 公網IP 8899
dev tun
;proto tcp-client
ifconfig 10.152.10.2 10.152.10.1
secret static.key
comp-lzo
verb 3
redirect-gateway def1
dhcp-option DNS 203.80.96.9
dhcp-option DNS 168.95.192.1
如果服務端啟用了TCP傳輸,那麼也需要啟用“proto tcp-client”一行(這裡未啟用),這裡我添加了一個香港加一個台灣的DNS,為了保證訪問正常。