在CentOS下搭建OpenVPN

國內網絡環境不怎麼好,爲了更好地在互聯網中學習和娛樂,弄部梯子也是有必要的,當然市售的有很多,但不折騰下怎麼能睡得着覺呢 ^_^

那梯子各式各樣,爲什麼用OpenVPN而不用PPTP或是更簡單的SSH呢?SSH是簡單但是打開網頁多了,它也就力不從心了;OpenVPN比PPTP好伺候,能裝在基於OpenVZ虛擬化技術的VPS上,當然裝Xen上更好(PPTP只能裝在基於Xen的VPS,但大多數VPS因爲成本原因是OpenVZ的),而且它穿透性更強,功能更強大,比如能穿透中國移動的cmwap代理實現cmnet的功能。

我這篇講解在CentOS 5.6上的搭建過程,如有童鞋需要在Debian上的搭建方法,請參考我的另外一篇博文《在Debian下搭建OpenVPN》

爲什麼會寫兩篇基於不同系統的教程呢?這裏有個小插曲,同事L小姐在MAC下更換授權文件時沒有全部更換完,加上本人對tunnelblick不熟,以爲是VPN服務端的原因,所以就在兩種系統下都進行了搭建,然後調整各種參數……最後的最後L小姐以初次安裝時的配置方法去配置授權文件才結束了這次各種折騰。雖然過程有些曲折,不過收穫還是蠻多,優化後的速度比之前快了許多。

好了,下面就準備動手摺騰吧:

首先得準備個VPS,起步配置很低,128M內存的就OK,要有哪位看客非得用32G獨服來搭,那爺您裏邊請,VIP雅座——美女水果、茶水點心伺候。

一、OpenVPN需要tun和iptables_nat模塊支持,所以先檢查你的VPS支持不支持。
SSH登陸VPS後輸入

cat /dev/net/tun

若返回信息爲:cat: /dev/net/tun: File descriptor in bad state 說明tun/tap已經可以使用;
如果返回:cat: /dev/net/tun: No such device 或其他則說明tun/tap沒有被正確配置,發TK聯繫客服申請開通tun/tap。

然後檢查iptables_nat模塊(如果還沒有安裝iptables,先安裝)

yum install iptables    #如已安裝跳過

如果你的VPS是Xen或KVM的請輸入:(eth0要根據具體的網卡標識來,可以通過ifconfig查看)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE

如果是OpenVZ的請輸入:(11.22.33.44是你VPS的IP)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44

然後用

iptables -t nat -L

查看iptables轉發狀態,如果顯示以下類似的結果則說明轉發成功:
target             prot opt source                      destination
SNAT              all -- 10.168.0.0/16                anywhere                    to:11.22.33.44

二、tun和iptables_nat模塊檢測通過後,正式進入安裝階段:
默認情況下CentOS的yum源是沒有OpenVPN的(不像Debian很多東西都可以一鍵apt-get install,這也是我比較喜歡Debian的原因),不過安裝EPEL這個東西成功後,yum源裏面就有OpenVPN了。
5.x版系統安裝EPEL:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

6.x版系統安裝EPEL:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

有的童鞋可能會說直接去openvpn.net下載安裝包手動編譯好了,個人認爲手動編譯聽起來是比較cool,不過沒有yum方便,像這裏OpenVPN需要lzo支持,安裝的時候會自動檢測系統,把lzo也安裝進去,手動的話還需要編譯其他沒有的組件。

yum -y install openvpn

對了,在所有步驟之前(就是剛登陸進來時),最好先更新升級下系統,這樣可以自動分析當前系統的安裝環境並根據具體命令網絡升級安裝所需組件,更便於之後組件的安裝。

yum -y update

三、安裝好後,先使用easy-rsa生成服務端證書:
默認OpenVPN的easy-rsa文檔會在/usr/share/doc/openvpn/examples/easy-rsa/,如果不在的話請先檢查是否安裝成功然後用locate或find命令查找該文檔。然後將該文檔下所需的配置文件複製到/etc/openvpn/下面:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

根據網友@kuge反映的情況——CentOS 6 系統升級後,如果安裝的是OpenVPN2.3版本,執行這一步時OpenVPN2.3版本報錯,顯示:

cp : cannot stat ' /usr/share/doc/openvpn/examples/easy-rsa/ ' no such file or dictionary

解決辦法:(感謝@kuge

wget https://cloud.github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
tar -zxvf easy-rsa-2.2.0_master.tar.gz
cp -R easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/

1、生成CA證書:

1 cd /etc/openvpn/easy-rsa/2.0
2 source vars
3 ./clean-all
4 ./build-ca

期間會提示輸入一些信息,直接回車默認即可。

2、生成服務器端證書和密鑰:(server爲服務端名字可以自定義)

./build-key-server server

期間也會提示輸入一些信息,直接回車默認,選擇[Y/n]的都選Y。

3、生成客戶端證書和密鑰:(client爲客戶端名字可以自定義,注意這裏的客戶端名字不能與上步的服務端名字相同)

./build-key client

期間也會提示輸入一些信息,直接回車默認,選擇[Y/n]的都選Y。 若要生成多個客戶端的證書和密鑰,將client改成另外的名字重複操作即可。所有生成的證書和密鑰存都放在/etc/openvpn/easy-rsa/2.0/keys/下面。

4、生成Diffie Hellman參數:

./build-dh

四、配置OpenVPN服務器端文件

1、編輯/etc/openvpn/server.conf 文件,如果沒有可以創建一個,加入下面的內容:(複製到VPS上時,最好把註釋去掉)

local 11.22.33.44    #11.22.33.44爲VPS的IP
port 8080    #端口,需要與客戶端配置保持一致,並保證與其他軟件無共用
proto udp    #使用協議,需要與客戶端配置保持一致
dev tun      #也可以選擇tap模式
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
 
0 ifconfig-pool-persist ipp.txt
 
server 10.168.1.0 255.255.255.0    #給客戶的分配的局域網IP段,注意不要與客戶端網段衝突!
 
push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
 
;duplicate-cn        #若不止一人同時使用該證書,請去掉前面的;
 
keepalive 20 60
comp-lzo
max-clients 50
 
persist-key
persist-tun
 
status openvpn-status.log
log-append openvpn.log
 
verb 3
mute 20

2、設置IP轉發,其實剛檢查iptables_nat模塊的步驟就是在設置轉發IP,再重複一遍:
若Xen或KVM的請輸入:(eth0要根據具體的網卡標示來,可以通過ifconfig查看)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE

若OpenVZ的請輸入:(11.22.33.44是你VPS的IP)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44

3、修改/etc/sysctl.conf的內容爲:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

重新載入/etc/sysctl.conf使其生效,執行如下命令:

sysctl -p

至此VPS上的服務器端配置就全部完成了。
若想使其配置生效,則需重啓OpenVPN服務

service openvpn restart --config /etc/openvpn/server.conf

由於VPS可能會因爲各種原因被重啓,爲了方便,可以使用cron寫個小腳本讓VPS在啓動時自動運行OpenVPN服務並設置iptables_nat轉發。
創建/root/vpn.sh 文件,加入下面的內容:(複製到VPS上時,最好把註釋去掉)

#!/bin/bash
/sbin/service openvpn start --config /etc/openvpn/server.conf   #CentOS下好像OpenVPN不能開機就自動運行,所以這裏設置下,如可以自動運行就去掉這句
/sbin/iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44    #實際根據自己VPS來做調整,這隻做示例

然後將這一腳本寫入cron執行計劃

crontab -e
 
@reboot /bin/bash /root/vpn.sh >/dev/null 2>&1

五、安裝配置OpenVPN客戶端文件

1、下載安裝客戶端
Windwos用戶推薦去openvpn.net選擇合適的版本進行安裝,安裝中的選項全部按默認即可;Mac用戶推薦使用tunnelblick

2、下載之前在VPS上生成的客戶端證書及密鑰
證書和密鑰存都在/etc/openvpn/easy-rsa/2.0/keys/裏,可以使用winscp鏈接到VPS上下載,將ca.crt、client.crt、client.key這三個文件下載到OpenVPN客戶端程序的config文件夾裏,默認爲:C:\Program Files\OpenVPN\config

3、創建客戶端配置文件
在C:\Program Files\OpenVPN\config 下面創建一個sunny.ovpn的文件,添加如下內容:

client        #這個client不是自定義名稱 不能更改
dev tun       #要與前面server.conf中的配置一致。
proto udp              #要與前面server.conf中的配置一致。
remote 11.22.33.44 8080    #將11.22.33.44替換爲你VPS的IP,端口與前面的server.conf中配置一致。
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt              #具體名稱以剛下載的爲準
cert client.crt              #具體名稱以剛下載的爲準
key client.key              #具體名稱以剛下載的爲準
ns-cert-type server
redirect-gateway
keepalive 20 60
#tls-auth ta.key 1
comp-lzo
verb 3
mute 20
route-method exe
route-delay 2

六、運行OpenVPN客戶端
運行OpenVPN GUI後,屏幕右下角的系統托盤區,會顯示一個由兩個紅屏電腦組成的圖標,右擊它,選中菜單中添加的名爲sunny的服務器,點擊Connect,過一會兒,OpenVPN圖標變成綠色時就表示鏈接成功了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章