ubuntu下用pptp搭建vpn服务器及相关上网配置

这次建立vpn服务器遇到的问题太多了,现在把基本流程和遇到问题总结一下,先说下遇到的问题

  • vpn连上但上不了网
  • vpn电脑可以连上,但手机却连不上(iptables问题)
  • 重启vpn连不上
  • crontab通过curl发送post上网登陆命令总是不成功
  • 限制ssh登陆ip
    以上问题都总结到以下流程中

本文环境
ubuntu 15.10 64位

安装配置PPTPServer

  • 安装pptp服务
1
sudo apt-get install pptpd
  • 修改/etc/pptpd.conf
1
sudo vim /etc/pptpd.conf

增加本地Ip和远程ip,此处ip与本机Ip及外网Ip没有关系,相当于路由器的网关Ip和内网Ip。

1
2
localip 192.168.11.1
remoteip 192.168.11.5-20,192.168.11.25 #格式
  • 修改/etc/ppp/pptpd-options
1
sudo vim /etc/ppp/pptpd-options

修改内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name pptpd

refuse-pap
require-chap
require-mschap
require-mschap-v2

ms-dns 223.5.5.5
ms-dns 223.6.6.6

proxyarp
nodefaultroute
lock
nobsdcomp
novj
nologfd

主要问题都出现在这个文件中,可以通过日志观察

1
tail -f /var/log/syslog
  • 修改/etc/ppp/chap-secrets
1
sudo vim /etc/ppp/chap-secrets

增加vpn连接的用户名密码,例如

1
2
vpn pptpd vpn *
guest pptpd guest *

重启pptp服务

1
sudo service pptpd restart
  • 修改/etc/sysctl.conf
1
sudo vim /etc/sysctl.conf

增加ipv4转发

1
net.ipv4.ip_forward=1

配置生效

1
sudo sysctl -p
  • iptables设置

手机连不上,连上了vpn上不了网主要是因为iptables.

1
2
3
4
5
6
sudo iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eno1 -j MASQUERADE 
sudo iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
sudo iptables -I INPUT --protocol 47 -j ACCEPT
# 以下两个任意一个即可
sudo iptables -I FORWARD -s 192.168.11.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356
#iptables -A FORWARD -p tcp --syn -s 192.168.11.0/24 -j TCPMSS --set-mss 1356

注意,以上的eno1为网卡名,可以通过ifconfig来查看;ip段为客户端的ip端。
查看iptables规则

1
iptables -nvL --line-number

更详细的可以使用

1
man iptables

设置开机启动定时任务等

  • 修改/etc/rc.local
1
sudo vim /etc/rc.local

增加启动项

1
2
3
4
service pptpd start
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eno1 -j MASQUERADE
iptables -I FORWARD -s 192.168.11.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356
#iptables -A FORWARD -p tcp --syn -s 192.168.11.0/24 -j TCPMSS --set-mss 1356

注意,rc.local文件默认是以root权限运行程序的

  • 设置crontab定时任务

学校的网页认证是早上定时断连,所以用curl定时post一个认证即可

1
2
# crontab -l #列出当前用户定时任务
crontab -e #进入编辑

增加一行

1
0 5,6,7,8 * * * /home/username/tools/usernamelogin

然后在相应文件写入命令

1
2
3
#! /bin/bash

curl -d "username=username&password=password&if_login=Y&B2=%B5%C7%C2%BC%28Login%29" http://89.23.00.00:5000/login/login1.jsp >> ./usernamelogin.log
  • 限制ssh登陆ip
    在/etc/hosts.allow输入
    (其中192.168.10.88是你要允许登陆ssh的ip,或者是一个网段192.168.10.0/24)

    1
    sshd:192.168.10.88:allow

    在/etc/hosts.deny输入(表示除了上面允许的,其他的ip 都拒绝登陆ssh)

    1
    sshd:ALL
  • 更改ssh登陆端口

    1
    vi /etc/ssh/sshd_config

客户端设置

手机端连接时要需要取消ppp加密选项。电脑端要选择pptp加密选项

参考

https://www.digitalocean.com/community/tutorials/how-to-setup-your-own-vpn-with-pptp
https://help.ubuntu.com/community/PPTPServer
https://github.com/viljoviitanen/setup-simple-pptp-vpn/blob/master/setup.sh
http://www.dabu.info/centos6-4-structures-pptp-vpn.html