[toc]
主机配置
类型:阿里云ECS
地域:美国西部 1 (硅谷)(美国西部1 可用区B)
付费类型:按量付费
实例规格:1 vCPU 0.5 GiB (突发性能实例 t5, ecs.t5-lc2m1.nano)
I/O 优化:I/O 优化实例
网络类型:专有网络
交换机:美国硅谷交换机
安全组:xxxxxx
内网 IP:10.0.xxx.xxx
公网带宽:按使用流量
当前使用带宽 峰值:100Mbps
系统盘:40GB 高效云盘
操作系统:Ubuntu 16.04 64位
数据盘:无
PPTP及iptables安装配置
-
安装PPTP
sudo apt-get update sudo apt-get install pptpd
-
配置
sudo vi /etc/pptpd.conf
取消掉以下2行的注释:
localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245
其中localip为主机ip(单网卡主机一般为eth0[内部网络]的地址,双网卡主机为eth1[外部网络]的地址),remoteip为分配给客户端的ip。
-
分配帐号
sudo vi /etc/ppp/chap-secrets
添加帐号按照以下格式(字段之间以tab做分割):
username pptpd password *
-
转发配置
sudo vi /etc/ppp/pptpd-options
取消掉以下注释
ms-dns 10.0.0.x ms-dns 10.0.0.x
修改dns为8.8.8.8,8.8.4.4
DNS最好是修改为8.8.8.8,8.8.4.4,经测试如果使用114.114.114.114,223.5.5.5等国际dns的国内提供商可能会导致客户端连接pptp以后无法上网sudo vi /etc/sysctl.conf
取消掉 net.ipv4.ip_forward=1 这一行的注释。开启内核IP转发,如果没有这一行,请自行添加。最后执行以下命令
sudo sysctl -p #使修改后的文件配置立即生效
-
配置iptables
安装iptables,用来实现请求的NAT转发
sudo apt-get install iptables
清除以前iptables规则(新装iptables用户可以自行跳过此步)
sudo iptables -F sudo iptables -X sudo iptables -t nat -F sudo iptables -t nat -X
开放gre协议以及1723、47端口,同时需在服务器供应商配置安装组的开放规则,否则依然会导致无法访问的问题。
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转发,-s参数转发地址一定要对应pptpd.conf中分配给客户机地址的网段,-o参数为需要用于转发请求的网卡名称,通过ifconfig可以看到。
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
-
启动pptpd服务
启动服务,让配置生效
sudo service pptpd start
-
部分网站无法访问的问题(比如百度等)
执行以下命令(二选一)
iptables -I FORWARD -p tcp --syn -i ppp0 -j TCPMSS --set-mss 1356 iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
-
配置随开机启动
对于按量付费用户,不能24小时都把服务器开着,所以需要配置服务随开机启动
编辑/etc/rc.local文件,在exit 0之前加上以下命令。以下命令需要根据上述操作自行修改配置。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 sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE sudo iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356 sudo service pptpd start
-
配置一个账号只能一处登录
创建auth-up文件
vi /etc/ppp/auth-up chmod a+x /etc/ppp/auth-up
在auth-up脚本中写入以下内容
#!/bin/sh # get the username/ppp line number from the parameters REALDEVICE=$1 USER=$2 # create the directory to keep pid files per user mkdir -p /var/run/pptpd-users # if there is a session already for this user, terminate the old one if [ -f /var/run/pptpd-users/$USER ]; then kill -HUP `cat /var/run/pptpd-users/$USER` rm /var/run/pptpd-users/$USER fi # copy the pid file of current user to /var/run/pptpd-users cp "/var/run/$REALDEVICE.pid" /var/run/pptpd-users/$USER
重启PPTP
service pptpd restart
-
配置登录记录
1.建立日志目录
mkdir /var/log/pptpdlog
2.记录登录信息
在ip-up中写入以下代码
#!/bin/sh LOG_DIR="/var/log/pptpdlog" curDay=`date +"%Y%m%d"` logFile="${LOG_DIR}/pptpd${curDay}.log" echo "##################################" >> $logFile echo "Now User $PEERNAME is connected!!!" >> $logFile echo "##################################" >> $logFile echo "time: `date -d today +%F_%T`" >> $logFile echo "clientIP: $6" >> $logFile echo "username: $PEERNAME" >> $logFile echo "device: $1" >> $logFile echo "vpnIP: $4" >> $logFile echo "assignIP: $5" >> $logFile
3.记录登出信息
在ip-down里写入以下代码
#!/bin/sh LOG_DIR="/var/log/pptpdlog" curDay=`date +"%Y%m%d"` logFile="${LOG_DIR}/pptpd${curDay}.log" echo "#####################################" >> $logFile echo "Now User $PEERNAME is disconnected!!!" >> $logFile echo "#####################################" >> $logFile echo "time: `date -d today +%F_%T`" >> $logFile echo "clientIP: $6" >> $logFile echo "username: $PEERNAME" >> $logFile echo "device: $1" >> $logFile echo "vpnIP: $4" >> $logFile echo "assignIP: $5" >> $logFile echo "connect time: $CONNECT_TIME s" >> $logFile echo "bytes sent: $BYTES_SENT B" >> $logFile echo "bytes rcvd: $BYTES_RCVD B" >> $logFile sum_bytes=$(($BYTES_SENT+$BYTES_RCVD)) sum=`echo "scale=2;$sum_bytes/1024/1024"| bc` echo "bytes sum: $sum MB" >> $logFile ave=`echo "scale=2;$sum_bytes/1024/$CONNECT_TIME"| bc` echo "average speed: $ave KB/s" >> $logFile
4.添加执行权限
写好之后务必确保ip-up和ip-down具有可执行权限,尤其是这两个文件本来不存在,自己后来再创建时,这两个文件会被视为纯文本,不会被执行,这正是原来那篇文章中所忽略的,所以记得加上
chmod 755 /etc/ppp/ip-*