要在家繼續項目的開發,但架設的GitLab只能校內訪問,更悲催的是學校架設的SSL VPN不支持Linux,好在想起學校以前架設的L2TP VPN,應該可以支持Linux,於是便一通谷歌百度,然而發現搜到的這些文章,要麼十分繁瑣,要麼無法配通,因此就寫了這篇博文,一則方便以後檢索,二則也能給有這方面需要的兄弟提供一個方便。
一、安裝XL2TPD
安裝xl2tpd很簡單,至少在Ubuntu上是這樣:
sudo apt-get install xl2tpd 二、配置XL2TPD
配置xl2tpd,需要修改它的配置文件(/etc/xl2tpd/xl2tpd.conf),如下所示:
sudo vi /etc/xl2tpd/xl2tpd.conf [global] port = 1701 access control = no [lac testvpn] lns = x.x.x.x ;您VPN服務器的IP地址或域名 redial = yes redial timeout = 15 max redials = 5 require chap = yes refuse pap = yes require authentication = yes name = [email protected] pppoptfile = /etc/ppp/options.l2tpd.testvpn ppp debug = no 其中比較關鍵的配置如下:
05行:[lac testvpn]是將VPN連接的名字設置為testvpn,您可以把它改成任何您想要的名字
06行:lns的內容填入您VPN服務器的IP地址或域名
10行:要求使用使用chap質詢握手認證協議
13行:name的內容需要填入您的用戶名
pppoptfile的內容則是您接下來要生成的選項文件名,具體創建過程如下:
sudo vi /etc/ppp/options.l2tpd.testvpn asyncmap 0 noauth crtscts lock hide-password modem netmask 255.255.255.0 proxyarp lcp-echo-interval 30 lcp-echo-failure 4 ipcp-accept-local ipcp-accept-remote noipx 然後再配置一下chap認證所需的用戶名和密碼即可:
sudo vi /etc/ppp/chap-secrets # Secrets for authentication using CHAP # client server secret IP addresses [email protected] * mypassword * 其中[email protected]是用戶名,它同xl2tp.conf配置文件中的name語句中的內容是一致的,而mypassword是該用戶使用的密碼。這樣就配置好了xl2tpd了。
三、連接VPN
配置好了xl2tpd之後,為了要讓它生效需要重啟該服務:
sudo /etc/init.d/xl2tpd restart 然後使用下列命令連接VPN:
sudo -u root -H sh -c "echo 'c wzuvpn' > /var/run/xl2tpd/l2tp-control" 四、接下來的工作:
上述命令使用之後,並沒有任何提示是否連接成功,為了檢查連接是否成功,就需要使用以下指令來查看:
ifconfig ... ppp0 Link encap:點對點協議 inet 地址:10.63.1.2 點對點:10.63.1.1 掩碼:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 躍點數:1 接收數據包:4 錯誤:0 丟棄:0 過載:0 幀數:0 發送數據包:5 錯誤:0 丟棄:0 過載:0 載波:0 碰撞:0 發送隊列長度:3 接收字節:40 (40.0 B) 發送字節:61 (61.0 B) 如下所示,使用ifconfig命令之後,如果看到有ppp0,則說明該VPN連接成功,否則請查看xl2tpd是否正常啟動(這個常在重啟機器後出現)。
VPN連接成功之後,並不能正常工作,它還缺乏兩個關鍵的內容,一是到內網的路由,二是內網內部服務器的解析。比如我學校的服務器使用192.168.0.0/255.255.128.0這個網段,而內網地址分配則使用整個10網段,因此我將我家中的路由設置為192.168.254.0/24這個網段,這樣就避免了訪問家裡網絡的沖突:
sudo route add -net 192.168.0.0 netmask 255.255.128.0 dev ppp0 sudo route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0 上述兩句表明通過ppp0來訪問內網及內網服務器,這樣查看機器上的路由如下所示:
route 內核 IP 路由表 目標 網關 子網掩碼 標志 躍點 引用 使用 接口 default dir-605 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 * 255.0.0.0 U 0 0 0 ppp0 10.63.1.1 * 255.255.255.255 UH 0 0 0 ppp0 link-local * 255.255.0.0 U 1000 0 0 eth0 192.168.0.0 * 255.255.128.0 U 0 0 0 ppp0 192.168.254.0 * 255.255.255.0 U 1 0 0 eth0 注意接口為ppp0的路由,千萬不要象有些文章中寫得那樣,使用下列語句:
sudo route del default sudo route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0 想象一下,01行一執行,默認路由被刪除,VPN連接就不可能不斷了。
那麼對內網服務器的解析如何來處理呢?如果只需要訪問幾個地址的話,可以直接在/etc/hosts文件中直接解析,如果需要訪問很多地址的話,可以修改/etc/resolv.conf文件中的DNS服務器,在頂部添加新的內網DNS服務器即可。
五、斷開VPN連接
斷開VPN連接可以用以下語句來實現:
sudo -u root -H sh -c "echo 'd wzuvpn' > /var/run/xl2tpd/l2tp-control" 這樣整個L2TP VPN的連接配置就介紹完了。
當然上述操作最好可以使用腳本來完成,由於沒幾句語句,所以就偷懶不寫了,什麼時候勤快了或更懶了,興許會寫出來,到時再更新吧!當然如果有兄弟看不下去,幫我寫了那就最為完美了。一笑!
另:如果有部分服務連接不上的話,可以修改/etc/ppp/options.l2tpd.testvpn文件,通過添加mtu 1400來解決(當然1400這個值比較保守,要精確大小的話,可以通過分析該服務的包來計算精確值,這個比較復雜在這裡就不詳細說明了。