使用者工具

網站工具


service:vpn:pptp_vpn_server

架設 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
service/vpn/pptp_vpn_server.txt · 上一次變更: 2019/11/16 08:12 由 127.0.0.1