本文主要是记录ubuntu 16.04安装pptp vpn 服务端以及客户端的过程
这是服务端
1. 安装pptp
1 | sudo apt-get install pptpd |
2. 修改pptpd.conf中的配置信息
1 | sudo vim /etc/pptpd.conf |
在末尾增加下面两行,或者打开的内容里面找到这两行,取消掉注释
1 2 | localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245 |
分别为创建vpn时的主机ip和连接vpn的其他主机使用的ip段,可以自行修改。
注意,这里的ip并不是指外网ip或者当前局域网ip,而是指创建VPN(虚拟专用网络)会分配的ip地址。一般这个可以不用修改。
3. 修改chap-secrets配置
连接pptp vpn所需要的账号和密码,修改配置文件
1 | sudo vim /etc/ppp/chap-secrets |
在末尾添加以下内容
1 2 | #用户名 pptpd 密码 * neo pptpd 123456 * |
末尾的表示可以使用任意IP连入,如果你要设置指定IP才能连接到vpn,可以将替换成对应的IP。支持添加多个账号。
4. 设置vpn的ms-dns
配置vpn使用的dns,修改配置文件
1 | sudo vim /etc/ppp/pptpd-options |
在末尾增加下面两行,或者打开的内容里面找到这两行,取消掉注释
1 2 3 | # 这是谷歌的DNS 可以根据实际填写 ms-dns 8.8.8.8 ms-dns 8.8.4.4 |
5. 开启转发
修改配置文件
1 | sudo vim /etc/sysctl.conf |
在末尾增加下面内容,或者打开的内容里面找到这一行,取消掉注释
1 | net.ipv4.ip_forward=1 |
保存之后执行
1 | sudo sysctl -p |
6. 配置iptables
若未安装iptables 执行脚本安装
1 | sudo apt-get install iptables |
tips:若之前安装pptp失败的。执行以下脚本;如果是第一次安装可忽略以下内容(目的为了清除iptables里旧的规则)
1 2 3 4 | 1. sudo iptables -F 2. sudo iptables -X 3. sudo iptables -t nat -F 4. sudo iptables -t nat -X |
然后,允许GRE协议以及1723端口、47端口:
1 2 3 | sudo iptables -A INPUT -p gre -j ACCEPT sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT |
下一步,开启NAT转发:
1 | sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno33 -j MASQUERADE |
注意,上面的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | neo@ubuntu:~$ ifconfig ens33 Link encap:Ethernet HWaddr 00:0c:29:37:79:85 inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.255.0 inet6 addr: xxxx::20c:29ff:fe37:xxxx/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:293 errors:0 dropped:0 overruns:0 frame:0 TX packets:211 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:26801 (26.8 KB) TX bytes:41763 (41.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:160 errors:0 dropped:0 overruns:0 frame:0 TX packets:160 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB) |
7. 重启pptp服务
1 | sudo service pptpd restart |
这是客户端
在另一个服务器(本文是用的是两个虚拟机)中执行以下内容
1. 安装pptp客户端
1 | sudo apt-get install pptp-linux |
2. 初始化一个VPN的连接通道:myvpn
使用服务端设置的账号密码
1 | sudo pptpsetup --create myvpn --server xxx.xxx.xxx.xxx --username neo --password 6yhn^YHN --encrypt --start |
1 2 3 4 5 6 7 8 9 | root@ubuntu:~# sudo pptpsetup --create myvpn --server 172.31.1.112 --username neo --password 6yhn^YHN --encrypt --start Using interface ppp0 Connect: ppp0 <--> /dev/pts/2 CHAP authentication succeeded MPPE 128-bit stateless compression enabled local IP address 192.168.0.234 remote IP address 192.168.0.1 root@ubuntu:~# |
3. 查看连接是否成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | root@ubuntu:~# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:xx:86:5f brd ff:ff:ff:ff:ff:ff inet .31.1.113/24 brd xxx.31.1.2xxx5 scope global ens33 valid_lft forever preferred_lft forever inet6 fxx0::20c:29ff:fxx3e:8xxf/64 scope link valid_lft forever preferred_lft forever 8: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1496 qdisc pfifo_fast state UNKNOWN group default qlen 3 link/ppp inet 192.168.0.234 peer 192.168.0.1/32 scope global ppp0 valid_lft forever preferred_lft forever root@ubuntu:~# |
也可以在pptp vpn 服务端查看
1 2 3 4 5 6 7 | neo@ubuntu:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 xxx.xxx.1.1 0.0.0.0 UG 0 0 0 ens33 xxx.xxx.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 192.168.0.234 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 neo@ubuntu:~$ |
4. 断开重启vpn
断开VPN连接
1 | poff myvpn |
重接VPN
1 | pon myvpn |
5. 处理错误
LCP: timeout sending Config-Requests
执行: