架設 PPTP VPN Linux
VPN (Virtual Private Network) 虛擬私人網路,簡單的說就是透過 Internet 建立一條 Point-to-point Protocol 連線,利用這個 PPP 與不在同一個網段的網路建立連線。再講白一點就是透過 Internet 加入私有網路,在企業典型的 Intranet 架構中,也常遇到跨地區私有網路共享的問題,因此也常用這個方法解決網路資料傳輸與安全問題(因為 VPN 可以加密)。由於 VPN 直接透過 Internet 建立連線,可省下遷專線的龐大費用,算是很超值的作法,而且標準的 PPTP 比那種需要安裝軟體的 VPN 方便多了。
安裝PPTPD
把握幾個重點即可快速完成 pptp 的 VPN Server 架設:
- ppp - 點對點協定 (Point-to-Point Protocol)
- pptpd - 點對點通道協定 (Point-to-Point Tunneling Protocol)
- iptables - 設定封包轉發規則
1. 判斷 ppp 是否可用:
$ cat /dev/ppp cat: /dev/ppp: No such device or address
如果出現跟上面一樣的訊息 “No such device or address”,不用擔心,這表示 ppp 是可用的,可以正常架設 pptp。若出現 “Permission denied”,表示 ppp 是關閉的,下面就可以不用再看了。
2. 安裝 ppp 與 iptables
$ yum -y install ppp iptables $ cp -rpf /etc/sysconfig/iptables /etc/sysconfig/iptables.pptpsave $ cd /usr/src
3. 安裝 pptpd (for RPM安裝, 要依照Linux的版本安裝)
for RPM http://poptop.sourceforge.net/yum/stable/
# Fedora 14 (32bit) $ wget http://poptop.sourceforge.net/yum/stable/fc14/i386/pptpd-1.3.4-2.fc14.i686.rpm # Fedora 14 (64bit) $ wget http://poptop.sourceforge.net/yum/stable/fc14/x86_64/pptpd-1.3.4-2.fc14.x86_64.rpm # for CentOS 6.x 32bit $ wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/pptpd-1.3.4-2.el6.i686.rpm # for CentOS 6.x x64 $ wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.3.4-2.el6.x86_64.rpm # for CentOS 5.x 32bit $ wget http://poptop.sourceforge.net/yum/stable/rhel5/i386/pptpd-1.3.4-2.rhel5.i386.rpm # for CentOS 5.x x64 $ wget http://poptop.sourceforge.net/yum/stable/rhel5/x86_64/pptpd-1.3.4-2.rhel5.x86_64.rpm
for 自行 make install
http://sourceforge.net/projects/poptop/files/pptpd/
4. 安裝上一個步驟所下載的 pptp 套件:
$ rpm -ivh pptpd-1.3.4-2.el6.i686.rpm
設定PPTPD
1. 設定Client看到的伺服器IP,以及DHCP分發的IP範圍
vi /etc/pptpd.conf
加入以下:
# 連線數 connections 20 # ppp 主機的 IP 不一定要與目前的 Server ip 相同,主要是告訴給 Client 作為 Default Route localip 10.0.0.1 # Client 連上後會分配的 IP Range remoteip 10.0.0.10-30
2. 設定pptpd的加密方式和發給Client的DNS
vi /etc/ppp/options.pptpd
修改以下:
# 與連線加密相關的設定 refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 # 設定要分派的 DNS Server ms-dns 168.95.1.1 # 指定 logfile logfile /var/log/pptpd.log # 設定閒置幾秒後自動斷線 idle 7200
3. 設定帳號密碼
(若使用ppp撥號(xDSL),撥號的帳密也會在這裡)
格式為:
帳號、使用的服務、密碼、接受的IP(通常為*號)(中間用空格隔開)
vi /etc/ppp/chap-secrets
內容大致為:
# client server secret IP addresses "xxxxxxxx@hinet.net" * "your password" test pptpd 12345 *
第一行為 hinet 撥接的帳密, 不用管, 第二行才是 pptpd 的使用者和其密碼
VPN 防火牆與 NAT 設定
1. 設定系統IP轉發<html><font color=“red”>(粉重要)</font></html>
開啟 Forward,主要是為了能夠進行 NAT,如果你不需要 NAT 也可以不要開,在大陸或國外會蠻好用的。
vi /etc/sysctl.conf
修改
net.ipv4.ip_forward = 1
讓系統重新載入設定值
sysctl -p
for CentOS 7
cat /etc/sysctl.conf System default settings live in /usr/lib/sysctl.d/00-system.conf. To override those settings, enter new settings here, or in an /etc/sysctl.d/.conf file For more information, see sysctl.conf(5) and sysctl.d(5). so, you should add into the file /usr/lib/sysctl.d/50-default.conf
也就是说,只需要再在 /usr/lib/sysctl.d/50-default.conf 文件里加入
net.ipv4.ip_forward = 1
就可以了。
2. 設定 iptable
主要是設定讓PPTP的Client能夠NAT上網
請依照對外連線的網路卡代號取代掉ppp0
ppp+的代表用來連接VPN Client的網卡,不需更動
vi /etc/sysconfig/iptables
*nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o ppp0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 其他要開啟服務的port依照格式寫在這裡 #----vpn---- -A INPUT -i ppp0 -p tcp --dport 1723 -j ACCEPT -A INPUT -i ppp0 -p gre -j ACCEPT -A FORWARD -i ppp+ -o ppp0 -j ACCEPT -A FORWARD -i ppp0 -o ppp+ -j ACCEPT #----vpn---- -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
重啟防火牆
/etc/init.d/iptables restart
or
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT iptables -A INPUT -p gre -j ACCEPT iptables -A OUTPUT -p gre -j ACCEPT # 開啟 NAT iptables -A FORWARD -i ppp+ -j ACCEPT iptables -A FORWARD -o ppp+ -j ACCEPT iptables -A POSTROUTING -t nat -o ppp+ -j MASQUERADE
or 不管安全性, 全開
echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/iptables -F /sbin/iptables -F -t nat /sbin/iptables -A INPUT -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
啟動PPTPD等服務
啟動PPTPD服務
/etc/init.d/pptpd start
重啟PPTPD服務
/etc/init.d/pptpd restart
斷除所有VPN連線
/etc/init.d/pptpd restart-kill
查看相關的Log
tail -n 30 /var/log/messages
查看連線情況
netstat -an | grep :1723 | sort