1. 程式人生 > >Ubuntu伺服器下VPN搭建PPTP、L2TP完整教程

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

  pptpd  123456     *               ---如果不指定ip,用*表示。如果要給每個賬戶分配一個固定的ip,就把ip寫在後面。這裡分配的ip就在上面設定的remoteip段內。

紅色字根據自己喜好填寫。分別是指使用者名稱和密碼。在登入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 

然後在客戶端進行連線,如果連上,這裡會有提示的。連不上也有提示,可以檢視哪裡有問題。

阿彌陀佛~~~