最近美國的Office準備修改VPN的設定,
1、用OpenVPN取代現在的PPTP VPN.
2、限制VPN對Internet的訪問,今後通過VPN只能訪問內部資源。
對我的影響則是:
1、不能用手機連入VPN了,iPhone不支援OpenVPN。
2、不能用公司VPN了。
不得以想到自己在Linode的VPS,通常只用來做一些測試和host一些Imified的Bot,每月200G的流量大多浪費了,不如乾脆自己建一個VPN好了。
因為單純自用,不需要什麼複雜的配置,很簡單的就搞定了,步驟如下:
1、安裝PPTP服務,因為系統是Ubuntu,所以簡單的apt-get就可以了。
sudo apt-get install pptpd -y
2、修改/etc/pptpd.conf
這個設定檔內容很簡單,主要需要修改的就是檔案末尾的localip和remoteip
#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
remoteip指的是將來分配給VPN Client的IP,localip則是將來VPN Client看到的遠端地址。VPN Client建立VPN串連後:
在VPN Client上ifconfig看到的:
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1444
inet 192.168.0.234 --> 192.168.0.1 netmask 0xffffff00
在Linode上ifconfig看到的:
ppp0Link encap:Point-to-Point Protocol
inet addr:192.168.0.1 P-t-P:192.168.0.234 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:385 errors:0 dropped:0 overruns:0 frame:0
TX packets:322 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:56584 (56.5 KB) TX bytes:91628 (91.6 KB)
3、修改/etc/ppp/chap-secrets,這個檔案名稱中儲存了訪問VPN的使用者名稱密碼,格式如下:
username pptpd password *
Username和password都是明文;pptpd代表格服務名,和/etc/ppp/options.pptpd裡的name對應,通常預設值就是pptpd;最後一項是分配這個使用者的ip,*代表隨機分配。
4、修改/etc/ppp/options.pptpd,大多數配置項都不需要修改,除了DNS設定:
#ms-dns x.x.x.x
#ms-dns x.x.x.x
去掉前面的#注釋符號,修改地址為真正有效DNS伺服器位址。VPN Client建立VPN串連後,就會使用這裡指定的DNS伺服器來解析網域名稱。如果這裡不指定,就需要在每個VPN Client上指定。
如果系統是Ubuntu,還需要在這個檔案中指定log檔案的位置,否則就需要在/etc/pptpd.conf中注釋掉logwtmp以徹底關閉log。
logfile /var/log/pptpd.log
5、重啟PPTP
/etc/init.d/pptpd restart
通常這樣VPN就可以工作,Client已經可以建立到Server的VPN串連,並且訪問Server的資源了。但是因為沒有建立從VPN到Internet的路由,所以Client是無法通過VPN訪問Internet,需要通過設定路由規則來解決。
6、開啟IP轉寄
修改/etc/sysctl.conf,開啟net.ipv4.ip_forward=1
執行sysctl -p使配置生效。
7、安裝iptables,通過iptables設定轉寄規則簡單,
apt-get intall iptables
8、添加轉寄規則
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
192.168.0.0/24 對應remoteip的網段
9、儲存iptables轉寄規則
由於iptables添加的轉寄規則在系統或網路裝置重啟後就會失效,所以需要儲存iptables的配置,並使它能在重啟後恢複。
儲存轉寄規則到/etc/iptables-rules
iptables-save > /etc/iptables-rules
建立新檔案/etc/network/if-up.d/iptables
#!/bin/sh
iptables-restore < /etc/iptables-rules
chmod +x /etc/network/if-up.d/iptables
這樣每次網卡啟動時都會重新從iptables-rules讀取iptables的轉寄規則