====== 架設 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