ubuntu搭建OpenVpn伺服器的教程,ubuntu搭建openvpn

來源:互聯網
上載者:User

ubuntu搭建OpenVpn伺服器的教程,ubuntu搭建openvpn
參考: OpenVpn For Ubuntu 16.04

環境介紹

伺服器系統: Ubuntu 16.04

用戶端系統: Ubuntu 16.04

版本: OpenVPN 2.3.10

基本配置

OpenVpn的技術核心是虛擬網卡,其次是SSL協議實現

安裝OpenVpn服務之後,主機上會多出一個名為tun0的虛擬網卡。而用戶端在與伺服器成功建立SSL串連之後,也會在本地多出一個tun0的虛擬網卡

搭建VPN服務的第一步,我們先使用戶端與伺服器能正確建立SSL串連

step1: 安裝openvpn和easy-rsa

在伺服器上安裝openvpn和easy-rsa

$ sudo apt install openvpn easy-rsa

step2: 複製easy-rsa臨時目錄到home目錄下

$ make-cadir ~/openvpn-rsa

step3: 配置產生認證的所需要的變數

使用文字編輯器開啟~/openvpn-rsa/vars,修改如下變數的值

(這些變數具體有什麼意義,我也不清楚,大家隨便改改吧 o(╯□╰)o)

export KEY_COUNTRY="CN"export KEY_PROVINCE="GD"export KEY_CITY="ShenZhen"export KEY_ORG="ORG"export KEY_EMAIL="me@myhost.mydomain"export KEY_OU="MyOrganizationalUnit"export KEY_NAME="EasyRSA"

step4: 產生CA認證

$ cd ~/openvpn-rsa$ source vars$ ./clean-all$ ./build-ca

step5: 產生伺服器憑證

$ ./build-key-server server$ ./build-dh$ cd keys/$ sudo cp server.crt server.key ca.crt dh2048.pem /etc/openvpn/

server是指伺服器名,此處可自行更改,為了方便,我把它設為server

此過程中,有幾處需要使用者確認的地方,根據提示輸入斷行符號或者y就行了

網上有些資料提示,server需要與vars檔案中的KEY_NAME的值保持一致,但親測貌似沒必要

step6: 產生用戶端認證

$ cd ~/openvpn-rsa$ source vars$ ./build-key clietn1

~/openvpn-rsa/keys目錄下會產生client1.crt和client1.key檔案,用戶端會用到

此處client1可換成自己的名稱

step7: 配置並啟動伺服器

為了讓OpenVpn起來,我們先簡單配置一下

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/$ sudo gzip -d /etc/openvpn/server.conf.gz

使用編輯器修改/etc/openvpn/server.conf檔案,配置認證和密鑰的正確路徑

ca ca.crtcert server.crtkey server.keydh dh2048.pem

我們可以通過systemctl命令來啟動、關閉或查看OpenVpn狀態

$ sudo systemctl start/status/stop/restart openvpn@CONFIGFILENAME

上面的命令中,CONFIGFILENAME是指設定檔名,我們現在使用的設定檔是server.conf,所以CONFIGFILENAME替換成”server”即可

啟動服務之後,我們通過ifconfig會發現一個新的網卡,資訊如下

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00            inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1          RX packets:610374 errors:0 dropped:0 overruns:0 frame:0          TX packets:721198 errors:0 dropped:9706 overruns:0 carrier:0          collisions:0 txqueuelen:100           RX bytes:40928674 (40.9 MB)  TX bytes:927687322 (927.6 MB)``

step8: 配置用戶端

我們還是在伺服器PC上產生用戶端的配置

$ mkdir ~/openvpn-rsa/clients$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-rsa/clients/base.conf

base.conf就是我們用戶端通用的設定檔了

使用編輯器修改用戶端設定檔,在上面對應~/openvpn-rsa/clients/base.conf,配置認證和密鑰的正確路徑以及伺服器的地址等資訊

ca ca.crtcert client.crtkey client.keyremote vpnserver.example.com 1194

把vpnserver.example.com改為伺服器的IP或網域名稱,其他需要按上面的填寫

step9: 打包用戶端配置

編輯打包指令碼~/openvpn-rsa/clients/make_client_tar.sh

#!/bin/bashif [[ $# != "1" ]] ; then    echo usage: $0 clientname    exit 1fiKEY_DIR=~/openvpn-rsa/keysCLIENT=$1mkdir ${CLIENT}cp ${KEY_DIR}/ca.crt ${CLIENT}/ca.crtcp ${KEY_DIR}/${CLIENT}.crt ${CLIENT}/client.crtcp ${KEY_DIR}/${CLIENT}.key ${CLIENT}/client.keycp base.conf ${CLIENT}/client.conftar -cf ${CLIENT}.tar ${CLIENT}rm ${CLIENT} -rf

修改許可權並運行指令碼

$ cd ~/openvpn-rsa/clients/$ chmod u+x make_client_tar.sh$ ./make_client_tar.sh client1

則會產生client1.tar打包檔案

用戶端認證只會在用戶端用到,我們還需要把clietn1.tar通過安全的途徑傳輸到用戶端

如果只圖方便而不考慮安全因素,可以使用python建立一個httpd伺服器,然後用戶端通過網頁下載認證即可

$ sudo python2.7 -m SimpleHTTPServer 80

step10: 啟動用戶端

在用戶端安裝openvpn

$ sudo apt-get install openvpn

把之前打包的檔案下載下來之後,解壓設定檔

$ cd /etc/openvpn/$ sudo cp ~/Downloads/client1.tar ./$ sudo tar -xf client1.tar$ sudo mv client1/* ./$ sudo rm client1.tar client1 -rf

systemctl的使用方式還是一樣

$ sudo systemctl start/status/stop/restart openvpn@CONFIGFILENAME

此處,把CONFIGFILENAME替換成client

啟動用戶端之後,通過ifconfig同樣可以發現一個新網卡,資訊如下

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00            inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:100           RX bytes:0 (0.0 B)  TX bytes:261 (261.0 B)

step11: 確認串連是否成功

我們可以通過ping來檢查伺服器與用戶端是否建立串連

$ ping -I tun0 10.8.0.1

如果能ping通,則說明一切正常

如果你在伺服器本地有搭建服務的話,則可以通過tun0來安全訪問了

但我們此時還不能通過OpenVpn上外網,使用命令ping -I tun0 8.8.8.8是ping不通的

因為資料到了伺服器的tun0之後並不能轉寄出去,我們還需要一些其他配置

進階配置

step1: 開啟ip轉寄功能

編輯檔案/etc/sysctl.conf,去掉下面語句前的#

#net.ipv4.ip_forward=1 

重載配置

$ sudo sysctl -p /etc/sysctl.conf

step2: 通過iptables配置NAT

建立一個shell指令碼/etc/openvpn/openvpn_nat.sh用來配置NAT

#!/bin/bashiptables -Fiptables -A FORWARD -o eth0 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPTiptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTiptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEiptables-save

其中eth0是伺服器串連到外網的網卡

設定指令碼許可權

$ sudo chmod u+x /etc/openvpn/openvpn_nat.sh

在/etc/rc.local中設定開機執行指令碼

/etc/openvpn/openvpn_nat.sh

備忘:

本來打算在/etc/openvpn/server.conf中配置,讓指令碼在OpenVpn啟動時執行的

up "/etc/openvpn/openvpn_nat.sh"

但測試發現,雖然手動重啟OpenVpn時,指令碼會被執行

但重啟伺服器卻不會執行指令碼

step3: 修改伺服器配置

使用編輯器修改伺服器設定檔/etc/openvpn/server.conf

$ push "redirect-gateway def1 bypass-dhcp"

使所有用戶端把預設閘道指向VPN,如果不配置這一項,需要在用戶端手動設定路由表

step4: 讓OpenVpn伺服器開機啟動

$ sudo systemctl enable openvpn@server

step5: 重啟OpenVpn

在伺服器上執行

$ sudo systemctl restart openvpn@server

在用戶端執行

$ sudo systemctl restart openvpn@client

step6: 配置用戶端DNS伺服器

通過以上步驟,如果你能通過tun0 ping通8.8.8.8,那麼說明伺服器的NAT設定成功了

$ ping -I tun0 8.8.8.8

但是,如果你還ping不通www.baidu.com,那麼你就需要指定預設DNS伺服器

編輯/etc/network/interfaces,在檔案中添加如下內容

dns-nameservers 8.8.8.8 74.82.42.42 8.8.4.4

重新載入DNS配置

$ sudo systemctl restart networking.service

如果成功,/etc/resolv.conf檔案中會更新DNS伺服器位址

step7: 查看VPN是否正常工作

在百度中搜尋IP,如果顯示的是你伺服器的IP,則說明VPN正常工作了

TODO

現在已經能通過VPN正常上(翻)網(牆)了

但是所有的資料都會從VPN過,希望訪問國內網站時,能不走VPN

具體要怎麼配置還有待研究

如果有知道的朋友,請告知,謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.