1. 首页 > 服务器运维

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

联系我们

在线咨询:点击这里给我发消息

微信号:

工作日:8:30-17:30,节假日休息