pptpd vpn手动分配IP部分用户无法上网
问题
公司vpn用户全部手动分配了指定的IP地址,近期总有人抱怨vpn有时候连不上服务器或者说不能上网, 各种路由表,各种电脑重启都没有效果,但是隔一段时间又好了。正巧又一位兄弟出现这个故障,告知不小心禁用了本地连接,重新启用本地连接,重新拨vpn就上不了网了,我重启pptpd问题便解决了。尤其看出了事情的原因。
问题排查
初步判定用户网络出现故障之后,vpn服务器的连接未断开,网络状态保持ESTABLISHED. 用户登录vpn之后,又分配了相同的IP地址,导致用户上不了网。以前重启pptpd都没注意到它有个警告,警告如下:
Warning: a pptpd restart does not terminate existing
connections, so new connections may be assigned the same IP
address and cause unexpected results. Use restart-kill to
destroy existing connections during a restart
意思就是没有杀掉正在连接的用户,新进来的用户可能会分配到相同的IP地址,使用restart-kill可以将正在连接的用户杀死。该死的,一直没留意这个问题。先看下我的chap配置,最后看看解决方法
手动分配VPN IP地址
如下是我手动分配IP地址的配置
# cat /etc/ppp/chap-secrets ttlsacom1 pptpd 89fb894 172.16.0.100 ttlsacom2 pptpd 4b54c92 172.16.0.101 ttlsacom3 pptpd bb7e234 172.16.0.102
ttlsacom1,ttlsacom2,ttlsacom3中任何一个用户网络出现点故障便会出现这种问题,特别是使用无线网络的用户(公司的wifi不稳定)
解决VPN单用户指定IP问题
创建auth-up文件
touch /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` fi # copy the pid file of current user to /var/run/pptpd-users cp "/var/run/$REALDEVICE.pid" /var/run/pptpd-users/$USER
流程如下:
1、用户登录判断是否有/var/run/pptpd-users/用户名的文件
2、如果有平滑重启这个vpn用户进程,如果没有创建这个文件,文本里面有用户进程ID
3、老的连接被踢掉,新的连接可以使用
备注:这种模式下,一个账号只允许一个用户使用。
重启pptpd
service pptpd restart-kill service pptpd restart
最后
pptp默认情况使用chap来认证,一个账号可以多个用户登录,这样不便于流量控制、网速限制等等,也可以使用auth-up这个脚本来限制一个账号只允许一个用户来登录.
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/yunwei/8245.html