Ubuntu Server下建立V*N服務器的方法

jopen 8年前發布 | 19K 次閱讀

以 root 賬戶登錄 VPS,或者當你運行下列命令提示權限不夠時,加上 sudo 再運行。
安裝 PPTPD:
編輯 /etc/pptpd.conf 文件,取消注釋以下 2 行:
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
添加 PPTP 賬戶:
編輯 /etc/ppp/chap-secrets 文件,按如下格式添加:
用戶名 pptpd "密碼" 允許接入的IP
其中密碼要用引號包圍。允許任何 IP 接入則用 * 號表示。
設置 DNS 服務器:
編輯 /etc/ppp/pptpd-options 文件,找到 ms-dns 部分來修改,我使用的是 Google 的:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
開啟 IP 轉發:
編輯 /etc/sysctl.conf 文件,取消注釋該行:
net.ipv4.ip_forward=1
然后運行這行代碼使配置生效:
sysctl -p
安裝 iptables:
apt-get install iptables
iptables -t nat -I POSTROUTING -j MASQUERADE
重啟 pptpd:

/etc/init.d/pptpd restart



首先,我所有的操作都是在之前文章中介紹的 Ubuntu 8.04 Server 系統中操作的,如果您的系統和我的不一樣,請參考之前的兩篇文章。我的服務器環境是單網卡 eth0。


在 Ubuntu 中建立 pptp server 需要的軟件包為 pptpd,用 apt-get 即可安裝:
sudo apt-get install pptpd


系統會自動解決依賴關系,安裝好后,需要進行一番設置。首先編輯 /etc/pptpd.conf
sudo nano /etc/pptpd.conf


去掉文件最末端的 localip 和 remoteip 兩個參數的注釋,并進行相應修改。這里,localip 是 V*N 連通后服務器的 ip 地址,而 remoteip 則是客戶端的可分配 ip 地址。下面是我的配置:
localip 10.100.0.1 remoteip 10.100.0.2-10


編輯好這個文件后,我們需要編輯 /etc/ppp/pptpd-options 文件,還是用 nano 編輯,命令這里就不寫了。這里絕大多數參數只需維持原來的默認值即可,我們只需要改變其中的 ms-dns 選項,為 V*N 客戶端指派 DNS 服務器地址:
ms-dns 202.113.16.10 ms-dns 208.67.222.222


修改 /etc/ppp/chap-secrets 文件,這里面存放著 V*N 的用戶名和密碼,根據你的實際情況填寫即可。如文件中注釋所示,第一列是用戶名,第二列是服務器名(默認寫 pptpd 即可,如果在 pptpd-options 文件中更改過的話,注意這里保持一致),第三列是密碼,第四列是 IP 限制(不做限制寫 * 即可)。這里我就不貼我的配置了


全部搞定后,我們需要重啟 pptpd 服務使新配置生效:
sudo /etc/init.d/pptpd restart


找一臺 Windows 電腦,新建個 V*N 鏈接,地址填服務器的 IP(或域名),用戶名密碼填剛才設置好的,域那項空著(如果你在 pptpd-options 中設置了,這里就保持一致),點連接就可以了。正常情況下您應該能夠建立與服務器的 V*N 鏈接了。


建立連接之后,您會發現除了可以訪問服務器的資源,其余內外和互聯網的內容均無法訪問。如果需要訪問這些內容的話,我們還需要進一步設置:


首先,開啟 ipv4 forward。方法是,修改 /etc/sysctl.conf,找到類似下面的行并取消它們的注釋:
net.ipv4.ip_forward=1


然后使新配置生效:
sudo sysctl -p


有些時候,經過這樣設置,客戶端機器就可以上網了(我在虛擬機上這樣操作后就可以了)。但我在實驗室的服務器上這樣操作后仍然無法訪問網絡,這樣我們就需要建立一個 NAT。這里我們使用強大的 iptables 來建立 NAT。首先,先安裝 iptables:
sudo apt-get intall iptables


裝好后,我們向 nat 表中加入一條規則:
sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE


這樣操作后,客戶端機器應該就可以上網了。


但是,只是這樣,iptables 的規則會在下次重啟時被清除,所以我們還需要把它保存下來,方法是使用 iptables-save 命令:
sudo iptables-save > /etc/iptables-rules


然后修改 /etc/network/interfaces 文件,找到 eth0 那一節,在對 eth0 的設置最末尾加上下面這句:
pre-up iptables-restore < /etc/iptables-rules


這樣當網卡 eth0 被加載的時候就會自動載入我們預先用 iptables-save 保存下的配置。


到此,一個 V*N Server/Gateway 基本就算架設完畢。當然,也許你按照我的方法做了,還是無法成功,那么下面總結一些我碰到的問題和解決方案:
無法建立 V*N 連接


安裝好 pptpd 并設置后,客戶端還是無法建立到服務器的連接。造成的原因可能有以下幾種:
服務器端的防火墻設置:PPTP 服務需要使用 1723(tcp) 端口和 gre 協議,因此請確保您的防火墻設置允許這兩者通行。
如果服務器在路由器后面,請確保路由器上做好相應的設置和端口轉發。
如果服務器在路由器后面,那么請確保你的服務器支持 V*N Passthrough。
如果客戶端在路由器后面,那么客戶端所使用的路由器也必須支持 V*N Passthrough。其實市面上稍微好點的路由器都是支持 V*N Passthrough 的,當然也不排除那些最最最便宜的便宜貨確實不支持。當然,如果你的路由器可以刷 DD-Wrt 的話就刷上吧,DD-Wrt 是支持的。
能建立鏈接,但“幾乎”無法訪問互聯網


這里我使用“幾乎”這個詞,是因為并不是完全不能訪問互聯網。癥狀為,打開 Google 搜索沒問題,但其它網站均無法打開;SSH 可用,但 scp 不行;ftp 能握手,但傳不了文件。我就遇到了這種情況,仔細 Google 后發現原來是 MTU 的問題,用 ping 探測了一下果然是包過大了。知道問題就好辦了,我們可以通過 iptables 來修正這一問題。具體原理就不講了,需要的自己 Google。這里只說解決方案,在 filter 表中添加下面的規則:
sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1200


上面規則中的 1200 可以根據你的實際情況修改,為了保證最好的網絡性能,這個值應該不斷修改,直至能保證網絡正常使用情況下的最大值。


好了,至此,一臺單網卡 pptp-server 就算完成了。


################### Separate Line #################


[操作成功,推薦]


以下是另一篇寫得很簡潔的解決方法,幫我解決了不少問題:


PS:找不到原文出處了,所以就不寫從哪里引用了


1)安裝PPtPD
sudo apt-get install pptpd


2)編輯文件 /etc/pptpd.conf
gedit /etc/pptpd.conf


取消以下內容中的文件注釋(也就是去掉語句前面的#號)
option /etc/ppp/pptpd-option
debug
logwtmp
localip 10.100.0.1 這個IP是自己自定義的
remoteip 10.100.0.2-10 表示分配給客戶端的IP及IP數量


3)編輯文件 /etc/ppp/pptpd-options
gedit /etc/ppp/pptpd-options


這里我們只改變兩個地方
3.1 name pptp
其中標紅的部份可以按你自己的需要改成你自己喜歡的服務器名


3.2V*N客戶端分配的DNS
ms-dns 202.96.128.86
ms-dns 202.96.128.133
我們這里以廣東東莞電信的DNS做例子


4)編輯文件 /etc/ppp/chap-secrets
gedit /etc/ppp/chap-secrets


這個文件是存儲V*N客戶端用戶名和密碼的地方我們以用戶名kelvin密碼abc 來做例子


在文件的最后加入以下一行


kelvin * abc *
其中第一個*表示默認服務器名稱
第二個*表示自動分配客戶端IP,當然你也可以手動找定


5)IP轉發設置
編輯 /etc/sysctl.conf
gedit /etc/sysctl.conf


找到以下內容取消注釋
net.ipv4.ip-forward=1


保存后在終端中運行 sudo sysctl -p 使配置生效


6)防火墻設置


編輯 /etc/default/ufw
找到以下語句改成一樣的
DEFAULT_FORWARD_POLICY="ACCEPT"
保存文件
在終端中輸入sudo ufw allow 1723/tcp (打開TCP1723端口)
sudo ufw allow 47/tcp (打開TCP47端口)


同時也在路由器中打開這兩個端口


7)重啟PPtp服務 sudo /etc/init.d/pptpd restart
重啟防火墻 sudo /etc/init.d /ufw
重啟計算機 reboot


8)備注Linux下架設的V*N與WIN的有點差別,差別在于客戶端要在外網IP段不同的子網內撥號才能成功,如服務器IP為192.168.1.248 則客戶端IP如果是192.168.1.XX的話
就撥號不成功了。

來自: http://my.oschina.net/lwaif/blog/591494

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!