====== 架設 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轉發**(粉重要)\\ 開啟 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