Ubuntu伺服器下VPN搭建PPTP、L2TP完整教程
最近一段時間在給公司搭建遠端虛擬網路,就是VPN。貧僧是在對網路知識近乎為0的情況下,一臉懵逼的接下了這個工作。然後就是百度百度,谷歌谷歌,無數次出錯無數次崩潰,最後已經準備破罐子破摔不想繼續了。
我以為是領導手把手教我,誰知道是直接丟給我一個活讓我開始!我連什麼是VPN都不知道,就讓我去搭建,還要劃分子網???領導太看得起我了。。。早知如此,我就不該腦抽地接下這活!悔不當初啊~~~~
木已成舟我也只能硬著頭皮上。我把自己整理的各個地方的步驟記錄下來,幫助自己梳理搭建過程中的注意事項,如果最後能成功,希望這份文件能幫助其他朋友。
一開始我在網上找的,多是搭建PPTP的,我也不知道它跟其他什麼xl2tpd,openswan等等有什麼區別,就直接照著網上的PPTP搭建。後來請教了一位大牛說PPTP很容易很block,我們領導也說不能用PPTP。不過我還是把之前記錄的PPTP的搭建步驟寫在下面,有些同學如果自己搭建著學習用的,倒也沒什麼關係。
一.PPTP搭建
我用的是Ubuntu伺服器。
1.1 安裝pptpd
第一步當然是安裝這個軟體包了。(下面所有的程式碼,如果需要修改的,我會特別標記出來的,其他都表示可以直接複製)
sudo apt-get install pptpd
1.2 編輯pptpd.conf檔案
(1)開啟這個檔案並進入編輯模式
vim /etc/pptpd.conf
vim是一個編輯軟體,跟vi一樣。假如沒有安裝它,直接把vim替換為 vi 也可以。
(2)取消註釋,並修改ip
這一步的作用是配置VPN虛擬網路的主機ip(閘道器)和這個虛擬主機分配給其他裝置的虛擬ip 段。
注意這個VPN虛擬ip主機和我們的伺服器的ip沒有關係,可以任意設定,ABC三類的內網地址都可以。而且最好避免和伺服器所在網段內的其他裝置ip衝突。比如說辦公室的內網ip是192.168.1.1,我們在配置vpn虛擬網路時就不能配置這個網段的,不然可能會跟內網ip起衝突。
這個檔案開啟後呢,裡面是有內容的,不過都是被註釋掉的。
裡面有兩個引數:localip 和 remoteip 。
# localip 192.168.2.1 ---(要填內網ip)表示分配給伺服器的內部閘道器地址。
# remoteip 192.168.2.2-255 ----當客戶機通過pptp連線到vpn後所能拿到的ip地址範圍,預設從第一個開始分配給客戶
1.3 修改chap-secrets檔案,新增可以登入的使用者
vim /etc/ppp/chap-secrets
開啟這個檔案後,就可以編輯了。
# client server secret IP addresses ---標題
name
紅色字根據自己喜好填寫。分別是指使用者名稱和密碼。在登入vpn賬號時要用到。
1.4 設定dns解析
vim /etc/ppp/pptpd-options
找到ms-dns ,取消掉註釋,並修改dns地址(下面這是Google的dns,也可以填上伺服器主機所在網路的dns地址。
ms-dns 8.8.8.8
ms-dns 8.8.4.4
1.5 開啟轉發
vim /etc/sysctl.conf
(1)取消註釋以下內容(開啟核心ip轉發)
net.ipv4.ip_forward=1
(2)更新配置
sudo sysctl -p
(3)安裝iptable
apt-get install iptables
(4)開啟gre協議
輸入下面的指令,開啟gre協議,並開啟伺服器47,1723號埠。
使用VPN需要開啟gre協議,而gre協議需要使用伺服器的47和1723號埠。
sudo iptables -A INPUT -p gre -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT
(5)開啟NAT轉發
sudo iptables -t nat -A POSTROUTING -s 192.168.2.1/24 -o eno1 -j MASQUERADE
注意
上面指令中ip要填寫部署pptp步驟中第1.2步中設定的localip,也就是虛擬vpn的主機的ip,上面設定的是192.168.2.1,192.168.2.1/24和192.168.2.1-255等價。
eno1表示當前伺服器的網絡卡,這裡不同機器可能不一樣,可以通過ifconfig指令進行查詢,之後修改成對應的裝置名稱即可。
POSTROUTING引數表示,指定當資料包離開伺服器的時候,對資料包進行處理。
MASQUERADE這個引數的意思就是即將從伺服器封包出去(-o)的那塊網絡卡上的IP,由於實驗室的伺服器是固定ip,所以這裡修改成伺服器的虛擬ip也是可以的。
通過上面的指令,iptables做了這樣一件事情:將所有從伺服器上傳出的源地址為192.168.2.1-255之中的ip資料包的源ip改成伺服器的ip。如果不做這個操作,伺服器通過VPN傳回的資料包將不包含伺服器自己的源ip,所以遠端訪問主機的回覆ip包會丟失。
1.6 重啟服務
service pptpd restart
1.7 配置客戶端,連vpn
沒有問題的話,應該就能連上了!
二. 搭建 L2TP
2.1 下載安裝包
貧僧翻閱了很多文章,發現不少文章都提到了要下載三個軟體包:openswan, ppp ,xl2tpd。
但是貧僧在下載的時候,不清楚是不是由於伺服器的版本不對,倉庫源裡下載不了openswan。去其他路徑下載也一直報這樣那樣的錯,最終沒下下來,導致有些檔案我是新建編輯的。後來問我帥氣又有才的領導,領導說只要另外兩個就行,不需要openswan。emmm,所以我也不知道了。各位在按照本教程進行搭建的時候,可以下就下一個,沒有應該也沒關係。
sudo apt-get install xl2tpd
sudo apt-get install ppp
2.2 修改ipsec檔案
(1)修改ipsec.conf檔案
vim /etc/ipsec.conf
這裡需要修改2個地方,一個地方填內網網段,一個填伺服器的公網ip。
下面這段程式碼裡,紅色部分是需要修改的。但是第一個我沒改,這個地方是自定義的,內網網段。
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24
#contains the networks that are allowed as subnet= for the remote client. In other words, the address ranges that may live behind a NAT router through which a client connects.
oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
dpddelay=30
dpdtimeout=120
dpdaction=clear
# Set ikelifetime and keylife to same defaults windows has
ikelifetime=8h
keylife=1h
type=transport
# Replace IP address with your local IP (private, behind NAT IP is okay as well)
left=x.x.x.x
# For updated Windows 2000/XP clients,
# to support old clients as well, use leftprotoport=17/%any
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
#force all to be nat'ed. because of iOS
forceencaps=yes
(2)修改ipsec.secrets檔案
vim /etc/ipsec.secrets
這個文件是修改金鑰。我當時沒改這個金鑰,感覺改不改不影響結果,反正是自定義。
# /etc/ipsec.secrets
這裡輸入你伺服器的外網ip %any: PSK "這裡輸入金鑰"
(3)修改網路策略
vim /etc/rc.local
把下面內容直接複製進去。
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
貧僧在自己電腦上沒有找到這個檔案,所以這一步沒有做。各位施主隨意。
反正系統在於折騰。
大不了重灌,嘻嘻。
重啟,重灌,格式化,運維三板斧。送給大家共勉。
(4)伺服器啟動ipsec服務
service ipsec start
2.3 修改l2tp配置
(1)修改xl2tpd.conf檔案
vim /etc/xl2tpd/xl2tpd.conf
確定要給客戶機劃分的網段。在下面這段程式碼裡,紅色部分需要修改:
[global]
ipsec saref = yes[lns default]
ip range = 客戶端內網起始IP地址-客戶端內網結束IP地址
local ip = 伺服器內網IP地址
require chap = yes
refuse pap = yes
require authentication = yes
name = *** Server
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
2.4 修改ppp配置
(1)修改options.xl2tpd。這個檔案裡主要是設定dns和服務名稱。
vim /etc/ppp/options.xl2tpd
下面這段可以直接複製替換。注意裡面的dns和name。這個name一定要和下一步的檔案裡的服務一樣。
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
name l2tpd
lock
proxyarp
connect-delay 5000
(2)修改chap-secrets檔案,新增使用者
vim /etc/ppp/chap-secrets
按照格式一一列下要增加的使用者列表。使用者名稱,密碼隨意;l2tpd不變,ip如果不指定就*,指定就一一遞增下去,確保不重複。
# Secrets for authentication using CHAP
# client server secret IP addresses
aa l2tpd 123456 172.16.0.2
bb l2tpd 123456 172.16.0.12
cc l2tpd 123456 172.16.0.22
dd l2tpd 123456 172.16.0.222
2.5 修改伺服器核心引數,開啟轉發
vim /etc/sysctl.conf
(1)取消註釋以下內容(開啟核心ip轉發)
net.ipv4.ip_forward=1
(2)更新配置
sudo sysctl -p
最後,啟動服務。l2tp設定完成。
service xl2tpd restart
2.6 防火牆新增規則
iptables -t nat -A POSTROUTING ! -s 127.0.0.1/8 -j MASQUERADE
iptables -I FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
---------------------------------------------------------------配置結束------------------------------------------------------------------------------------------
最後再提供兩個命令。在除錯時有用。
(1)檢視日誌
cat /var/log/syslog
如果只看最後,可以用tail -f.
(2)啟動l2tp服務程序
xl2tpd -D -c /etc/xl2tpd/xl2tpd.conf
然後在客戶端進行連線,如果連上,這裡會有提示的。連不上也有提示,可以檢視哪裡有問題。
阿彌陀佛~~~