Ubuntu 下搭建 PPTP VPN
之前买的 VPN 服务快到期了,正好手上有东京的 VPS,趁机利用起来,整个过程这里记录一下
配置 PPTP
安装 pptpd,安装之前可以先 apt-get update 一下
1 | sudo apt-get install pptpd |
装好了之后修改配置文件
1 | sudo vim /etc/pptpd.conf |
取消以下两行注释:
1 | localip 192.168.0.1 |
分别是通过 VPN 连接后主机和客户端所使用的 IP,可以自行修改。注意这个IP在下面还会用的到
设置 dns:
1 | sudo vim /etc/ppp/pptpd-options |
找到 ms-dns,取消掉注释,改成 8.8.8.8, 8.8.4.4
设置账号:
1 | sudo vim /etc/ppp/chap-secrets |
添加一行,依次为:用户名,服务,密码,限制 ip
1 | username pptpd password * |
重启服务,查看状态,是否监听了 1723 端口:
1 | sudo service pptpd restart |
设置 IP 转发
1 | sudo vim /etc/sysctl.conf |
取消掉 net.ipv4.ip_forward=1 这一行的注释,如果未来 ipv6 普及了,估计应该就是改 ipv6 了
然后执行
1 | sudo sysctl -p |
使修改后的文件配置立即生效
安装iptables,如果还没有安装的话:
1 | sudo apt-get install iptables |
然后开启NAT转发:
1 | sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE |
192.168.0.0/24 是我们在上面设置的 IP 段,让这个段转发
注意 eth0 是你连接外网的那块网卡,不一定是 0 也有可能是 1 或者看你的机器哪块网卡连的外网了。这样就以NAT的方式请求外网的东西了。不知道你的机器哪块网卡连的外网的话 ifconfig 一下看看哪个网卡是外网IP就知道了
保存规则,使重启后规则不丢失,先用 su 命令进入 root 用户,然后:
1 | iptables-save >/etc/iptables-rules |
编辑网卡文件,加载网卡时自动加载规则(似乎可能导致 ec2 实例无法重启)
1 | sudo vim /etc/network/interfaces |
末尾加入:
1 | pre-up iptables-restore </etc/iptables-rules |
常见问题
1、PTY read or GRE write failed
查看日志/var/log/syslog,发现类似这样的错误:
1 | GRE: read(fd=6,buffer=80504c0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs |
打开 /etc/pptpd.conf,把 logwtmp 注释掉即可
2、pptpd 无法启动
运行 service pptpd status
查询服务状态时提示 pptpd is not running
再次 service pptpd start
,查询状态依然提示 pptpd is not running
这个貌似是 ubuntu14.04 的一个 bug
打开/etc/init.d/pptpd,找到下面这行
1 | status_of_proc "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? |
在 status_of_proc 后面添加一个参数 -p
1 | status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? |
然后保存重启服务即可
3、经常掉线或网速非常慢
这个问题似乎和 MTU 默认大小有关,设置 MTU,防止包过大:
1 | sudo iptables -A FORWARD -s 192.168.0.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1200 |
然后记得保存:
1 | sudo iptables-save >/etc/iptables-rules |