ubuntu 搭建VPN伺服器
阿新 • • 發佈:2019-01-22
$ sudo apt-get install pptpd
如果你的Linux的核心版本低於2.6.15, 那麼需要先檢查一下是否支援MPPE:
$ sudo modprobe ppp-compress-18 && echo "success"
若是沒有輸出“success”則證明核心不支援, 可以跟隨這裡的步驟進行核心的配置.
Poptop安裝完畢之後需要簡單配置一下, 開啟“/etc/pptpd.conf”檔案, 新增下面兩行, 或者這個檔案已經有了一些示例, 只需要去掉註釋符號.
localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245
“localip”表示VPN隧道中伺服器 (server) 的IP地址, “remoteip”表示VPN隧道中客戶端 (client) 可以分配的IP地址. 關於“pptdp.conf”檔案的更多選項, 可以閱讀它的man page.
編輯好這個檔案後,我們需要編輯 /etc/ppp/pptpd-options 檔案,這裡絕大多數引數只需維持原來的預設值即可,我們只需要改變其中的 ms-dns 選項,為 VPN 客戶端指派 DNS 伺服器地址:
ms-dns 8.8.8.8
然後設定用於登入的使用者名稱和密碼, 開啟“/etc/ppp/chap-secrets”檔案, 新增下面一行, 中括號部分代表需要配置的地方:
[username] pptpd [password] *
最後重啟Poptop:
$ sudo /etc/init.d/pptpd restart
現在試試用其它電腦是否可以成功連上, 注意客戶端填寫的IP地址是VPN伺服器的外網IP, 而不是剛才配置的“localip”.
雖然可以成功建立VPN連線, 但通常情況下還不能通過VPN伺服器連線到Internet. 原因有多種, 先來看看客戶端通過VPN伺服器與Internet上的伺服器通訊的全過程:
client <--> client ppp0 <--> VPN server ppp0 <--> VPN server <--> VPN server eth0 <--> Internet server eth0 <--> Internet server
“ppp0”其實是VPN虛擬的一個網路介面 (可以想象成這是一個虛擬的網絡卡), VPN隧道就是通過客戶端與伺服器的這兩個網路介面建立的. 而“eth0”則代表伺服器上真實存在的物理網絡卡, VPN伺服器與外網通訊就需要通過它. 具體流程是: 客戶端通過“ppp0”向VPN服務
器發出請求, VPN伺服器偵測到之後, 再將請求通過“eth0”轉發出去, 當請求到達目的地之後, Internet伺服器就根據請求做出相應的回覆, 這個回覆再按照剛才來的路徑返回到客戶端, 這樣客戶端就成功與Internet伺服器完成一次通訊.
上面圖示中的箭頭部分 (“<-->”) 就是可能造成無法連線Internet的關鍵, 因此需要針對每個部分一一排查.
是否已經開啟IP轉發?
檢視“/proc/sys/net/ipv4/ip_forward”檔案中的值是否為“1”, 如果不是, 則需要在“/etc/sysctl.conf”檔案中新增“net.ipv4.ip_forward=1”, 然後執行以下命令:
$ sudo /etc/init.d/procps restart
是否在VPN伺服器上設定了對於客戶端IP地址的NAT?
執行下面的命令查看錶中是否有相應的表項:
$ sudo iptables --table nat -L POSTROUTING
如果沒有則執行以下命令:
$ sudo iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
VPN伺服器的1723(TCP)埠是否開放
$lsof -i:1723 或者 netstat -ntpl|grep 1723
如果有顯示說明已經開放了,如果沒有顯示說明沒有開放。
如果沒有:
安裝iptables(已安裝請忽略)
sudo apt-get install iptables
開放1723埠
sudo iptables -I INPUT -p tcp –dport 1723 -j ACCEPT
重啟pptpd
sudo /etc/init.d/procps restart
在完成上面兩個檢查之後, 應該就可以成功通過VPN伺服器與Internet進行通訊, 一個VPN伺服器也基本配置完畢
如果你的Linux的核心版本低於2.6.15, 那麼需要先檢查一下是否支援MPPE:
$ sudo modprobe ppp-compress-18 && echo "success"
若是沒有輸出“success”則證明核心不支援, 可以跟隨這裡的步驟進行核心的配置.
Poptop安裝完畢之後需要簡單配置一下, 開啟“/etc/pptpd.conf”檔案, 新增下面兩行, 或者這個檔案已經有了一些示例, 只需要去掉註釋符號.
localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245
“localip”表示VPN隧道中伺服器 (server) 的IP地址, “remoteip”表示VPN隧道中客戶端 (client) 可以分配的IP地址. 關於“pptdp.conf”檔案的更多選項, 可以閱讀它的man page.
編輯好這個檔案後,我們需要編輯 /etc/ppp/pptpd-options 檔案,這裡絕大多數引數只需維持原來的預設值即可,我們只需要改變其中的 ms-dns 選項,為 VPN 客戶端指派 DNS 伺服器地址:
ms-dns 8.8.8.8
然後設定用於登入的使用者名稱和密碼, 開啟“/etc/ppp/chap-secrets”檔案, 新增下面一行, 中括號部分代表需要配置的地方:
[username] pptpd [password] *
最後重啟Poptop:
$ sudo /etc/init.d/pptpd restart
現在試試用其它電腦是否可以成功連上, 注意客戶端填寫的IP地址是VPN伺服器的外網IP, 而不是剛才配置的“localip”.
雖然可以成功建立VPN連線, 但通常情況下還不能通過VPN伺服器連線到Internet. 原因有多種, 先來看看客戶端通過VPN伺服器與Internet上的伺服器通訊的全過程:
client <--> client ppp0 <--> VPN server ppp0 <--> VPN server <--> VPN server eth0 <--> Internet server eth0 <--> Internet server
“ppp0”其實是VPN虛擬的一個網路介面 (可以想象成這是一個虛擬的網絡卡), VPN隧道就是通過客戶端與伺服器的這兩個網路介面建立的. 而“eth0”則代表伺服器上真實存在的物理網絡卡, VPN伺服器與外網通訊就需要通過它. 具體流程是: 客戶端通過“ppp0”向VPN服務
器發出請求, VPN伺服器偵測到之後, 再將請求通過“eth0”轉發出去, 當請求到達目的地之後, Internet伺服器就根據請求做出相應的回覆, 這個回覆再按照剛才來的路徑返回到客戶端, 這樣客戶端就成功與Internet伺服器完成一次通訊.
上面圖示中的箭頭部分 (“<-->”) 就是可能造成無法連線Internet的關鍵, 因此需要針對每個部分一一排查.
是否已經開啟IP轉發?
檢視“/proc/sys/net/ipv4/ip_forward”檔案中的值是否為“1”, 如果不是, 則需要在“/etc/sysctl.conf”檔案中新增“net.ipv4.ip_forward=1”, 然後執行以下命令:
$ sudo /etc/init.d/procps restart
是否在VPN伺服器上設定了對於客戶端IP地址的NAT?
執行下面的命令查看錶中是否有相應的表項:
$ sudo iptables --table nat -L POSTROUTING
如果沒有則執行以下命令:
$ sudo iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
VPN伺服器的1723(TCP)埠是否開放
$lsof -i:1723 或者 netstat -ntpl|grep 1723
如果有顯示說明已經開放了,如果沒有顯示說明沒有開放。
如果沒有:
安裝iptables(已安裝請忽略)
sudo apt-get install iptables
開放1723埠
sudo iptables -I INPUT -p tcp –dport 1723 -j ACCEPT
重啟pptpd
sudo /etc/init.d/procps restart
在完成上面兩個檢查之後, 應該就可以成功通過VPN伺服器與Internet進行通訊, 一個VPN伺服器也基本配置完畢