跳至主要内容

使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

#2016-01-04 决定将本文作废,因我要另再写新版本的配置。这篇作于 2013年,而strongswan已经更新很多版本。

#本文需要有独立的VPS,如果你需要一台速度快,每月30元的左右的VPS,可以使用我的邀请注册 http://www.vultr.com/?ref=6813064 并且在注册时使用 SSDVPS 可以送 $20(或者 $10 不等)。一定要选日本线路,这个到国内延迟约40ms ~ 100ms ,一般是 80ms 左右,非常快非常稳定,一个月32元,可以和几个人合租了。


#LOG:2014-04-30 对ipsec.conf进行修改,增加了android手机的兼容,现在可以支持完整支持android 自带的VPN设置啦~~~~

#LOG:2013-0609 对ipsec.conf进行修改,加入清楚DPD代码,防止IP 地址池不正确占用

#LOG: 2013-0519 删除ipsec.conf 中多余的conn iOS一节,这本是我一年前调试用的,时间不起作用; 删除了 %default中的 rightsubnet ,如果不删除,在定义了多段IP路由的情况下会导致账号无法上网(只有一段IP没这个bug),感谢 

#LOG 2013-05-12 修正bug,原配置文件会导致一个ID不可以同时多次登陆。得蒙   指点,对 strongswan.conf 加入duplicheck.enable = no ,对 ipsec.conf 加如 uniqueids=never

#完成度100%


在我们生活的周围,通常要用到很多种VPN: PPTP, L2TP/IPSec, Cisco IPSec, IKEv2, 这些不同类型的VPN覆盖了目前我们常见的所有手机或者电脑平台,比如 iOS, Blackberry OS, BB10, Android, WebOS, Windows XP, Windows Vista/7/8, Unix/Unix-like。

(*如果你正在找blackberry 翻墙方法、ios ipsec vpn、windows IKEv2 VPN、Blackberry BB10 / Z10 VPN、android VPN,建议放弃本文,这里不是现成的VPN工具而是服务器搭建过程,也就是读了本文你可以初步具备出售VPN的能力)


环境:Debian 6.0 ( 64bit), StrongSwan 5.0.4, FreeRadius 2.2.10, Mysql , pppd 2.4.5 , pptpd v1.3.4,daloRadius,Apache 。

 目标:
    1 使用 FreeRadius作为用户认证和计费  
    2 使用daloRadius来管理用户,包括账单、到期时间、登录状态  
    3 StrongSwan 承载IPSec加密,实现 Cisco IPSec, IKEv2综合vpn接入服务  

重要说明:

 IKEv2是非常优秀的vpn,它与Cisco IPSec 完全不同,而且支持Mobile IP 技术,已经是我日常最多使用的VPN。下面的配置同时实现了两者(cisco ipsec 和 ikev2),如果你不用不到,就在阅读下面的文章时忽略掉。  

正题


阶段一 安装所需要的软件


一般的教程,都是安装了一个软件紧接着就将此软件的配置写一下,我就不这么做了,直接将需要的软件都安装完成,最后再写每一样的配置。

1 StrongSwan
尽管你可以用 apt-get install 来安装,但是那已经是旧版本,根本就不能满足我们的目标,请自行下载 http://www.strongswan.org/download.html ,我当前使用的是 5.0.2 ,解压缩,然后开始安装

cd strongswan-5.0.4

Debian Linux下

apt-get install libssl-dev

./configure  --enable-eap-identity  --enable-eap-mschapv2  --enable-eap-tls  --enable-eap-dynamic  --enable-eap-radius   --enable-xauth-eap   --enable-xauth-pam    --enable-dhcp    --enable-openssl  --enable-unity   --enable-certexpire --enable-tools  --disable-gmp  --enable-coupling  --enable-ipseckey


注意:
FreeBSD下需要变更为:

 ./configure --enable-kernel-pfkey --enable-kernel-pfroute --disable-kernel-netlink \
  --enable-tools --enable-scripts --with-group=wheel --enable-eap-identity \
 --enable-eap-md5 --enable-eap-mschapv2 --enable-eap-radius --enable-xauth-eap \
 --enable-openssl --enable-radattr --enable-unity --disable-gmp  --enable-pem
 make  
 make install  



注意的是,以上的配置参数你可以任意增减唯独红色字体务必保留,这决定了我们后面的所有配置能否畅通。

2 安装FreeRadius,pptpd,pppd,mysql-server

这些全部通过apt-get 进行安装就可以了

FreeBSD 下通过 pkg_add -r 也可以安装好

3 daloradius

*daloradius非必选,你也可以使用其他管理器,例如 Freeradius ARA (地址 http://labs.asn.pl/ara/ 其实我更推荐这个玩意,简单好用)

在这里下载 http://sourceforge.net/projects/daloradius/ ,不过这个是网页客户端,因此你需要安装 Apache或者Nginx ,直接apt-get install就可以。

将daloRadius解压缩放在网站根目录下(其实位置你可以自己定义,这个不是难点),比如我的就是放在 https://test.com/radius下面。

OK,第一阶段工作完毕,接下来我们就一步一步来配置我们的服务器


阶段二 配置服务器


1 配置 StrongSwan ,使得服务器使用Radius 认证计费

1.1 下面是我的 strongswan.conf,请务必删除其中的中文注释。

 root@v4:/usr/home/bao3 # cat /usr/local/etc/strongswan.conf   
 # strongswan.conf - strongSwan configuration file  
 charon {  
     i_dont_care_about_security_and_use_aggressive_mode_psk = yes 
#上面这一行相当重要,并且只对 strongswan5.0.1以后的版本有效,没有它的话很多系统使用 ike将不支持aggrisive模式 
     install_virtual_ip = yes
     duplicheck.enable = no
#上面这行很重要,否则一个ID只能同时一个在线
     #interfaces_use = em0   #如果你的系统无法工作,请取消注释,并且手动指定端口,但一般不必如此
     # number of worker threads in charon  
     threads = 16  
     dns1=208.67.222.222  
     dns2=8.8.8.8  
     # send strongswan vendor ID?  
     # send_vendor_id = yes  
     plugins {  
         sql {  
             # loglevel to log into sql database  
             loglevel = -1  
             # URI to the database  
             # database = sqlite:///path/to/file.db  
             # database = mysql://user:password@localhost/database  
         }  
     eap-radius {  
         #eap_start = yes  
         accounting = yes  
         servers {  
          primary {  
             address = radius.youname.org 
#这里用以指定Radius服务器,如果你的FreeRadius跟strongswan在同一台,你可以使用 localhost或者127.0.0.1 
#这里使用了 servers {} ,你可以指定多个Radius,例如 primary,2nd,last1,这里我只使用一个,随意起了个名字:primary
             secret = testing123  
             auth_port = 1812  
             acct_port = 1813  
                 }  
             }  
         }  
     xauth-eap {  
#这一行比较重要,未来要用在ike v1 ,也就是目前大多系统使用的cisco ipsec模式
         backend = radius  
         }  
 }  
  # Two defined file loggers. Each subsection is either a file  
   # in the filesystem or one of: stdout, stderr.  
   filelog {  
     /var/log/charon.log {  
       # add a timestamp prefix  
       time_format = %b %e %T  
       # loggers to files also accept the append option to open files in  
       # append mode at startup (default is yes)  
       append = no  
       # the default loglevel for all daemon subsystems (defaults to 1).  
       default = 3  
       # flush each line to disk  
       flush_line = yes  
     }  
     stderr {  
       # more detailed loglevel for a specific subsystem, overriding the  
       # default loglevel.  
       ike = 3  
       knl = 3  
       # prepend connection name, simplifies grepping  
       ike_name = yes  
     }  
   }  
   # And two loggers using syslog. The subsections define the facility to log  
   # to, currently one of: daemon, auth.  
   syslog {  
     # optional identifier used with openlog(3), prepended to each log message  
     # by syslog. if not configured, openlog(3) is not called, so the value will  
     # depend on system defaults (usually the program name)  
     identifier = charon-custom  
     # default level to the LOG_DAEMON facility  
     daemon {  
     }  
     # very minimalistic IKE auditing logs to LOG_AUTHPRIV  
     auth {  
       default = 0  
       ike = 0  
     }  
   }  
     # ...  
 }  
 pluto {  
 }  
 libstrongswan {  
     # set to no, the DH exponent size is optimized  
     # dh_exponent_ansi_x9_42 = no  
 }  

1.2 配置ipsec.conf,建立Cisco IPSec和IKEv2

以下是我的ipsec.conf,你可以依据你的需要来更改IP地址池,本例中我的客户端拨VPN后得到的IP地址是 192.168.99.128/25 的范围。同样请务必删除其中的中文注释(抱歉,为了让大多数人能读懂并且操作实践,因此使用了中文)。

 root@v4:/usr/home/bao3 # cat /usr/local/etc/ipsec.conf   
 config setup
     uniqueids=never  
#上面这行很重要,允许一个ID同时多次登陆
    
 conn %default  
     ikelifetime=60m  
     keylife=20m  
     rekeymargin=3m  
     rekey=no  
     keyingtries=1  
     keyexchange=ike  
     leftsubnet=0.0.0.0/0  
     right=%any    
     rightsourceip=192.168.99.128/25  
     dpdaction=clear
       dpddelay=300s
       dpdtimeout=1h
 conn IPSec-IKEv2  
     keyexchange=ikev2  
     auto=add  
     leftauth=pubkey  
     leftcert=serverCert.pem  
     rightauth=eap-radius  
     rightsendcert=never  
     eap_identity=%identity  
     compress=yes  
 conn CiscoIPSec  
     keyexchange=ikev1  
     auto=add  
     aggressive=yes  
     compress=yes  
     ike=aes256-sha1-modp1024!  
     esp=aes256-sha1!  
     dpdaction=clear  
     leftid=blackberry
#上面这个leftid对应的就是cisoc ipsec设定里面的group name,也有一些客户端里面叫IPSec ID,都一样
#至于Group Password(也叫IPSE secret)会在另外的文件里配置,这里不着急  
         type=tunnel 
         xauth=server
         leftauth=psk
         rightauth=psk   
         rightauth2=xauth-eap
         leftfirewall=yes  
conn android_xauth_psk
    keyexchange=ikev1
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    auto=add


以上是IPSec的启动文件,光有这些还不行,上面只是规定了IKE交换阶段的算法和加密,我们需要指定PSK

1.3 IPSec Secret (即PSK)

 root@v4:/usr/home/bao3 # cat /usr/local/etc/ipsec.secrets   
  %any %any : PSK "heibang"  
#注意哦, %any %any 这个格式很多网上的资料都是写成 yourIP %any ,这表示对所有与你IP(yourIP)进行通讯都使用后面的 heibang 进行PSK加密,但是我有多台VPS,在复制配置文件的时候总是需要指定yourIP为我的每一台VPS的实际IP(XX.XXX.XXX.XX)。于是突然有一天我突发奇想,换成了 %any %any,这样就适用于我的任何VPS系统了。。。。。如果你遇到问题,请你将第一个%any 改成你自己的IP。


1.4 调试StrongSwan

  ipsec start --nofork   

这时候你可以看到strongswan 在前台运行,并且出现很多字符,你可以根据这些字符找到问题来进行排查。
由于目前还没有配置FreeRadius,所以还不能进行正常的认证,下一步我们就着手解决这个问题

2 配置FreeRadius2和mysql-server

2.1 mysql-server的配置
我不能写太多关于mysql的部分,因此安装以及正常运行需要你参考其他mysql的文章进行,我只写关于FreeRadius的部分

 cd /etc/freeradius/sql/mysql  
 #FreeBSD: cd /usr/local/etc/raddb/sql/mysql  
 mysqladmin -uroot -p create radius  
 mysql -uroot -p  
 mysql>GRANT ALL ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'radpass';  
 mysql>FLUSH PRIVILEGES;  
 mysql>quit  
 #下面创建FreeRadius的数据库表单  
 mysql -uroot -p radius <schema.sql  
 mysql -uroot -p radius <nas.sql  
 mysql -uroot -p radius <cui.sql  
 mysql -uroot -p radius <ippool.sql  

2.2 更改FreeRadius,使得可以连接Mysql Server


cd /etc/freeradius/
 #FreeBSD: cd /usr/local/etc/raddb/


vi sql.conf

 server = "localhost"  
 login = "radius"     
 password = "radpass"     
 radius_db = "radius"      
 readclients = yes  

接下来告诉FreeRadius启用sql


 sed -ie 's/^[ \t]#\$INCLUDE sql.conf$/\$INCLUDE sql.conf/' radiusd.conf  
 sed -ie 's/^#[ \t]sql$/sql/' sites-available/default  

sed这两句的意思就是查找radiusd.conf和 default文件,把注释掉的sql行取消注释,也就是启用sql
#FreeBSD用户注意哟,FreeBSD下的sed不是Linux下的GNU Sed,因此有些指令不同,需要自己调整,或者你直接就 vi 编辑吧


2.3 配置freeradius对IKEv2进行认证

IKEv2使用MSCHAPv2进行加密,但是默认FreeRadius使用md5,因此我们要修改一下:

 cat eap.conf      
 eap {  
         default_eap_type = mschapv2  
 .......  
 #上面一行省略号代表其他配置不改变,仅更改default  
   }  


3 调试FreeRadius和Mysql Server

我们手动创建一个用户 vpntest,密码 vpntest

 mysql -uroot -p  
 mysql> use radius;  
 mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('vpntest', 'Password', 'vpntest');  
 mysql> FLUSH PRIVILEGES;  
 mysql> quit  


然后停止FreeRadius Demon,并使用debug模式

freeradius -Xx

如果成功了,应该看到如下信息:

 Listening on authentication address * port 1812  
 Listening on accounting address * port 1813  
 Ready to process requests.  
如果没有出现,请根据debug信息找到问题,多数情况是由于无法连接mysql server造成,接下来

 radtest vpntest vpntest localhost 1812 testing123  
 Sending Access-Request of id 226 to 127.0.0.1 port 1812  
     User-Name = "vpntest"  
     User-Password = "vpntest"  
     NAS-IP-Address = 127.0.1.1  
     NAS-Port = 1812  
 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=226, length=20  


至此为止,服务器环境就已经搭建好了,接下来是细微调整。

4 NAT和防火墙设定

这个每个系统都不一样,iptables在不同Linux上也不相同,所以你需要自己去设定一下,我这里就不赘述。
你需要将 192.168.99.128/25加入NAT
你需要放通 UDP 500 和 UDP 4500 端口
你需要指定 ESP 同行
个别系统下,你需要放通 tun0 的通讯
你需要更改 /etc/sysctl.conf : net.inet.ip.forwarding=1

5 联调

请打开两个 ssh 窗口,分别输入

 ipsec start --nofork  


 freeradius -Xx  



然后使用客户端进行连接,黑莓 os 4/5/6/7上设定如下:

 名称:IPSecVPN  
 网关类型: Cisco 安全 PIX VPN (或者 Cisco ASA)  
 集中器地址: 你的服务器IP或者域名  
 组名: blackberry  
 组密码: heibang  
 用户名: bao3  
 用户密码:bugaosuni   
 保存密码短语: 勾选  
 启用扩展身份验证:勾选  
 动态DNS:勾选  
 IKE DH组:第2组  
 IKE 密钥:AES(256)  
 IKE无用数据:HMAC SHA1(160位)  
 完全正向保密:不勾选!!!!!(重要)  
 IPSec加密和无用数据组: AES256-SHA1  
 使用硬件令牌:不勾选!!!!(重要)  


然后设定你的wifi 配置文件,里面的vpn指定为我们刚刚创建的。

在iOS上的配置:

 通用->找到VPN项并进入->添加VPN配置  
 iOS有L2TP / PPTP / IPSec,选择 IPSec  
 描述: IPSec VPN  
 服务器: 你的IP或者域名  
 账户:bao3  
 密码:你的密码  
 RSA / 使用证书 : 不要打开!!!  
 群组名称: blackberry  
 密钥: heibang  
 设定完成  


Windows 设置:
可以下载盗版的cisco vpn  client,也可以使用免费的shrew vpn client



拨号测试一下,主要观察刚刚让你打开的SSH上面的出错信息,最后一一解决掉。

OK,到目前为止,IPSec VPN就完成了

6  IKEv2 的配置

原本预计5月7日完成,不过这几天被General Master约谈了,加上我夜里也要调整服务器,就耽搁了

今天是5月8日,IKEv2,开始。

其实在我的 ipsec.conf 里已经包含了“conn IPSec-IKEv2 ” ,那里面已经规定了通讯方式,分配IP,我们现在要做的是生成IKEv2的证书,导入windows 8/blackberry playbook /bb10 中去使用。

6.1 生成服务器证书----Ca,Server两种证书

提示:
    1 我的IKEv2配置是客户端使用根证书+用户名密码的方式上网,如果你在寻找完全使用证书认证上网的方式就无需向下阅读。
    2 经twitter朋友指正,你使用startssl 的根证书也是一样的,无需自己生成,所以你可以跳过下面这一段。


 ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=CN, O=heibang, CN=vpn.youname.org" --ca --outform pem > caCert.pem  
 ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem \  
      --dn "C=CN, O=heibang, CN=vpn.youname.org" --flag serverAuth --outform pem > serverCert.pem  

重要:上面的高亮字体是提示你,务必要写你的真实域名,也就是客户要连接你的vpn服务器的真实地址。如果你vpn服务器是www.abc.com,但是你这里写成了 www.xyz.com,客户机是不能使用vpn的。


以上两条命令可以生成四个文件:caCert.pem, caKey.pem, serverCert.pem serverKey.pem。

6.2 启用证书

需要将其中三个导入StrongSwan 的配置目录,也就是ipsec.d,默认情况下应该是这样:

 mv -f caCert.pem /usr/local/etc/ipsec.d/cacerts/  
 mv -f serverCert.pem /usr/local/etc/ipsec.d/certs  
 mv -f serverKey.pem /usr/local/etc/ipsec.d/private/  

而后:

 ipsec stop && ipsec start --nofork  

你应当可以看到:

 08[CFG] received stroke: add connection 'IPSec-IKEv2'  
 08[CFG] left nor right host is our side, assuming left=local  
 08[CFG] adding virtual IP address pool 192.168.99.128/24  
 08[CFG]  loaded certificate "C=CN, O=heibang, CN=vpn.youname.org" from 'serverCert.pem'  
 08[CFG]  id '%any' not confirmed by certificate, defaulting to 'C=CN, O=heibang, CN=vpn.youname.org'  
 08[CFG] added configuration 'IPSec-IKEv2'  


已经起作用了,但是不要着急,这样的话你会无法登陆,会出现"[IKE] no private key found for XXXXXXXX",因为我们少做了一步:

 vi /usr/local/etc/ipsec.secret  
 : RSA serverKey.pem  


6.3 windows 8 使用IKEv2

6.3.1 电脑中导入证书

经过以上两步,服务器上的IKEv2是已经搭建好了,接下来就是让windows来创建连接了:
1) 使用管理权限运行 mmc,我是直接win+R 然后输入mmc 。
2) 出现控制台,此时空白,点击“文件”、“添加或者删除”
3)在左侧找到“证书”二字,点击中间的“添加”,会弹出新的对话窗,点选“本地计算机账户”点击确定,这一点很重要
4)在左侧鼠标右键点选“受信任的根证书颁发机构”,弹出菜单中选择“所有任务”-〉“导入”
5)将刚刚我们制作好的 caCert.pem 导入


6.3.2 创建连接并拨号

1)创建新连接,选择“连接工作场区(VPN)”,点下一步
2)这个画面因人而异,看本文能看到这里自然知道如何处理
3)直到让你输入internet地址和连接名称,这里一定要输入你在生成证书时写在证书里的域名,或者不填写保留空白(windows会根据你的证书自动补上)
4 直接保存,然后就可以拨号了




阶段三 VPN账户管理

1 搭建服务器运行环境

恭喜你,来到了这个阶段,虽然很痛苦,不过到了这里,也就意味着这篇教程要终止了。只是这个终止的过程同样很曲折。我选用了流行的 DaloRadius + Nginx 作为管理平台,我也有apache的,只是觉得应该为自己以后留点东西。

FreeBSD系统下编译nginx如下:(其他系统跳过这段)
 ./configure --with-poll_module --with-http_ssl_module --with-http_spdy_module \  
 --with-http_realip_module --with-http_addition_module \  
  --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module \  
 --with-http_secure_link_module --with-http_stub_status_module --with-http_perl_module --without-mail_pop3_module \  
 --without-mail_imap_module --without-mail_smtp_module \  
 --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/etc/nginx/nginx.conf \  
 --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --http-log-path=/var/log/nginx/access.log  




你需要使用fcgi模式来跑php,这里不多说了

2 配置DaloRadius

下载DaloRadius,任意放一个位置,然后使用

ln -s daloradius /usr/local/nginx/html/admin
chown -R www:www /usr/local/nginx/html/admin

这样就可以短网址访问,最重要的是配置daloradius

cd /usr/local/nginx/html/admin

vi library/daloradius.conf.php

 $configValues['CONFIG_DB_HOST'] = 'localhost';  
 $configValues['CONFIG_DB_PORT'] = '3306';  
 $configValues['CONFIG_DB_USER'] = 'radius';  
 $configValues['CONFIG_DB_PASS'] = 'radpass';  
 $configValues['CONFIG_DB_NAME'] = 'radius';  
 $configValues['CONFIG_PATH_RADIUS_DICT'] = '/usr/local/etc/raddb/dictionary';  
 $configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/var/log/daloradius/var';  
 $configValues['CONFIG_LOG_FILE'] = '/tmp/daloradius.log';  

以上几行是需要注意的,要改成你实际的东西才可以。接下来要倒入daloradius自己的数据库表格:

 cd contrib/db/  
 mysql -uroot -p radius < fr2-mysql-daloradius-and-freeradius.sql   


3 登录使用daloradius

如果你就这么打开浏览器登录dalradius,可能会得到 error 500,这是因为你的php缺少组件"DB",使用pear 安装就可以。

 PHP Warning: include_once(DB.php): failed to open stream: No such file or directory  
  pear install db  


登录的用户名密码默认是 administrator和radius。进入后就可以添加用户了。


4 数据同步

也许你不止一台vps,你可能5台、2台,那么我们可能需要对数据库做热备份,万一其中一台有问题还可以切换到另一台,同时freeradius承担认证服务,也需要冗余备份。
4.1 mysql的同步

很简单,修改my.cnf,你需要将一台服务器作为master,其余的都是slave,这样当master的数据有变更就会分发到slave上,完成了同步

master 设定:

 server-id     = 1  
 log_bin        = /var/log/mysql/mysql-bin.log  
 expire_logs_days   = 10  
 max_binlog_size     = 100M  
 binlog_do_db     = radius  



slave  设定:

 server-id   = 2  
 replicate-do-db     = radius  
 key_buffer       = 1M  
 max_allowed_packet   = 16M  
 thread_stack      = 192K  
 thread_cache_size    = 8  
 myisam-recover     = BACKUP  



然后在master上创建一个账户(例如backup),账户需要对radius有权限。并且在slave上进入mysql> ,输入 start slave; 就可以了。


freeradius就只靠dns来达到冗余。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
||终于写好了
||______________________________________________________________





评论

  1. 感谢铁牛兄的教程,一个小修正:
    strongswan.conf的eap-radius中不应有eap_start=yes,这样反而会造成strongswan不发送eap message从而无法认证.

    回复删除
  2. 牛兄,已经8号了,没看到教程,失望!!!

    回复删除
    回复
    1. 兄台,今夜在解决一些棘手的问题,看着回复时间你就知道我没有睡觉。。。。。现在是凌晨3:43.解决了strongswan 在FreeBSD下一些奇怪的问题,解决了SSH使用Radius认证的问题,解决了mysql多台间同步异常的问题,抱歉,很累,估计要白天更新一下。

      删除
    2. 牛兄,不好意思,凌晨我是开个玩笑的,请注意身体,我自己也写博客,要用心写好文章其实很花时间的。按你的意思,你在每台服务器上都是安装了独立的Radius服务器,如果是这样的话,各台服务器之间mysql是怎么同步的,能否指定下,谢谢!
      不好意思,我对mysql和linux的掌握的不是很好。

      删除
    3. 可同步,我用的就是同步。

      删除
    4. 牛兄 能提供ssh使用radius认证的教程嘛?

      删除
  3. 此评论已被作者删除。

    回复删除
  4. 感谢分享。已知BUG:同一ip下,2个设备用一个账号使用ciscoipsec登陆的话,会造成其中一方无法连接....之前用的racoon则没这问题

    回复删除
    回复
    1. 谢谢反馈,我去strongswan mailist看看。

      删除
    2. config setup里面加个uniqueids=never即可

      删除
  5. 牛凶,执行到这里出现这个错误该怎么解决:
    root@debian:/home/sjd/strongswan-5.0.4# ipsec pki --self --in caKey.pem --dn "C=
    CN, O=heibang, CN=us9.xzvpn.com" --ca --outform pem > caCert.pem
    openssl FIPS mode(0) unavailable
    opening 'caKey.pem' failed: No such file or directory
    building CRED_PRIVATE_KEY - RSA failed, tried 5 builders
    loading private key failed

    我google了好久没找到原因,请指点下,谢谢!

    回复删除
    回复
    1. 我不确定你的问题在哪里,根据提示:

      1 不存在caKey.pem:解决,抱歉,我已经修正过内容,是我的疏忽,没有加入生成caKey.pem的命令。请阅读原文

      2 openssl 不支持fips,不知是否是前一个原因引起的。新的openssl以及附带fips功能,这个可以去openssl网站下载编译安装的。

      3 后面的几个提示就是因为前面引起导致rivate key无法生成。

      4 另外,我恰好今天更新了一下strongswan,ipsec两个配置文件,在开头有说明,你看一下。

      删除
    2. 牛兄,我的环境是Debian 6.0.3 32-bit ,前面在用ios连接是正常的,但在生成证书时还是报错,信息如下:
      root@anqi:/home/sjd/strongswan-5.0.4# ipsec pki --gen --outform pem > caKey.pem
      openssl FIPS mode(0) unavailable

      删除
    3. 这个我实在无法解决。其实你也可以直接使用startssl 的证书而不必自己生成。

      删除
    4. 小问题而已,不影响使用。

      参见http://bazaar.launchpad.net/~vcs-imports/strongswan/master/revision/9790

      删除
    5. 已经顺利解决生成证书的错误,Richard,对你来说可能是个小问题,却困扰我两天了,感谢两位的帮助

      删除
    6. andy兄,如何解决的?

      删除
    7. andy, 我制作证书时也有提示这个错误,但是用起来毫无问题....不知道你那里是什么问题呢

      删除
    8. @铁牛 @Richard Bird @andy
      [root@develop ~]# ipsec pki --gen --outform pem > caKey.pem
      openssl FIPS mode(0) - disabled
      [root@develop ~]# ipsec pki --self --in caKey.pem --dn "C=CN, O=lighten, CN=192.168.0.175" --ca --outform pem > caCert.pem
      openssl FIPS mode(0) - disabled
      [root@develop ~]# ipsec pki --pub --in serverKey.pem
      openssl FIPS mode(0) - disabled
      opening 'serverKey.pem' failed: No such file or directory
      building CRED_PRIVATE_KEY - RSA failed, tried 5 builders
      parsing private key failed
      [root@develop ~]# ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=lighten, CN=192.168.0.175" --flag serverAuth --outform pem > serverCert.pem
      openssl FIPS mode(0) - disabled
      我这个不是unavailable 是直接 disabled了,使用--with-fips-mode=1 重启编译FIPS还是disabled。请问这是什么问题?

      删除
    9. ipsec pki --gen --outform pem > serverKey.pem

      删除
  6. 铁牛兄,按照配置我搭建一遍,验证过不去,iphone 提示用户鉴定失败
    日志显示:
    sending RADIUS Access-Request to server 'radius'
    retransmitting RADIUS message
    retransmitting RADIUS message
    retransmitting RADIUS message
    RADIUS server is not responding
    XAuth authentication of 'usertest' failed
    generating TRANSACTION request 4109169414 [ HASH CP ]
    sending packet: from 198.148.112.xxx[4500] to 60.166.115.xx[20173] (76 bytes)
    received packet: from 60.166.115.xx[20173] to 198.148.112.xxx[4500] (76 bytes)
    parsed TRANSACTION response 4109169414 [ HASH CP ]
    destroying IKE_SA after failed XAuth authentication

    是验证信息发不到radius服务器那边去?这个是什么原因啊

    回复删除
    回复
    1. 这个你要自己调试radius才可以,可能是radius中secret不对,也可能是用户密码的问题。

      删除
    2. 谢 铁牛兄,我现在用shrew vpn client 能连接但是不能翻墙,这是什么问题啊?

      删除
  7. 博主你好:
    系统是ubuntu server,root登录,个人用不需要账户管理应该如何修改配置?此外,按您的配置,ios登录提示用户鉴定失败,是否是没有安装 FreeRadius,pptpd,pppd,mysql-server daloradius 这些的原因,还是需要用新建的用户登录系统,并启动strongwan ipsec服务?

    回复删除
  8. 牛胸,按您的配置下来,centos下遇到问题了,
    11[ENC] parsed AGGRESSIVE request 0 [ SA KE No ID V V V V V V V V V V V V V V ]
    11[IKE] no IKE config found for xx.xx.xx.xx...aa.aa.aa.aa, sending NO_PROPOSAL_CHOSEN
    不知道该如何修改?谢谢

    回复删除
  9. 我是用了另外搭建的一个freeradius服务,按照你上面写的,我走到了

    1.4 调试StrongSwan
    ipsec start --nofork

    这个地方,但是当我配置了cisco ipsec的连接去连接的时候,会出现下面的log,牛兄帮忙看一下:
    06[NET] received packet: from 58.254.168.70[15674] to 74.117.60.86[500] (596 bytes)
    06[ENC] parsed ID_PROT request 0 [ SA V V V V V V V V V V V V V V ]
    06[IKE] no IKE config found for 11.22.33.44...55.66.77.88, sending NO_PROPOSAL_CHOSEN
    06[ENC] generating INFORMATIONAL_V1 request 2790258504 [ N(NO_PROP) ]
    06[NET] sending packet: from 11.22.33.44[500] to 55.66.77.88[15674] (40 bytes)

    11.22.33.44是我的strongswan服务器的ip地址
    55.66.77.88是我发起连接端的ip地址

    回复删除
    回复
    1. 兄弟,看提示,是没有找到正确的config,需要你检查一下你的客户端配置是否与服务端匹配。如果你是android,用这个配置就100%不能连接了。这个好像是android的bug。需要另写配置。

      删除
    2. 我用的是mac os 自带的vpn配置,选择了cisco ipsec配置的
      no IKE config指的是客户端的配置问题么?
      我是mac ox应该怎么配置呢?

      删除
    3. 可能已经回复你太晚,你的这个问题应该是客户端连接你的服务器时,没有办法找到对应的conn ,也就说说,你的参数匹配有问题。

      删除
  10. 请问铁牛兄,在strongswan.conf中的radius server地址“radius.youname.org”,你用的是域名吗?为什么我使用域名失败,而用ip地址成功。使用域名时,在charon.log中的错误信息是“receiving RADIUS message failed : Connection refused”。请问你是否知道是由什么原因造成的?

    回复删除
  11. 铁牛兄,我的问题是针对strongswan.conf文件中的“address = radius.youname.org”这个参数。我的vpn server和radius server不在同一个vps上,在此处我填写radius server的ip地址时,认证可以成功,但如果填写域名则失败,请问是什么原因,你是用的域名吗?
    p.s. charon.log中的错误日志是Receving radius server message failed:connection refused,而在radius debug mode下,radius显示没有接受到任何认证请求。我试着用iptables放行所有进出流量,但也不成功。

    回复删除
    回复
    1. Hi,我的也一样,我有3台vps,一台radius,都是使用域名连接,没有什么问题。我建议你尝试一下 dig 或者nslookup 看看是否是解析错误。你也可以直接修改 /etc/hosts,将你的域名和IP写进去来排除DNS故障。

      另外一个问题就是,有可能你的IP到达radius时,已经不是原来的公网IP,我以前遇到过一次,明明自己是144.XX.xx.XX,到了radius那服务器却变成了74.XX.XX.XX。

      这个情况我也不确定怎么帮你。你或者可以暂时将iptable设定成全部都accept,也许也能奏效。

      删除
    2. 非常感谢!按照你的思路,我查找到原因是DNS将域名解析成了ipv6地址,而我在radius server上没有打开对ipv6的监听,造成请求被拒绝。
      为供后人参考,打开ipv6监听的方法是修改radiusd.conf文件,添加两个listen字段,具体可参考http://www.embeddedsystemtesting.com/2012/11/how-to-enable-free-radius-server-for.html

      删除
  12. 铁牛兄,我的一台vps 运行了一段时间发现 charon进程好像假死了一样,ikev1 l2tp over ipsec都连接不上。
    ipsec 任何命令都不能用,ipsec status 看状态一直挂在那里也不退出,ps 查看进程也在,就是不能连。不知铁牛兄有没有遇到这样的情况?

    回复删除
    回复
    1. 这个我没有遇到过,不过你可以尝试检查是否是内存swap都满了?或者是500, 4500端口问题

      删除
  13. 这个我没有遇到过,不过你可以尝试检查是否是内存swap都满了?或者是500, 4500端口问题

    回复删除
  14. 您好,我正在配置 IKEv2 服务器,使用的是 StartSSL 的证书,已经把三个 .pem 全都放到对应文件夹了,ipsec 也提示 loaded RSA private key from '/usr/local/etc/ipsec.d/private/serverKey.pem' 和 loaded certificate "C=CN, CN=sub.mrx.im, E=webmaster@mrx.im" from 'serverCert.pem',但是 Windows 使用 sub.mrx.im 连接依旧提示 13801 错误。请问如何解决?

    回复删除
    回复
    1. windows下,你需要先将证书,通过控制台倒入到电脑(win7之前),但是win8可以偷懒。这样,win才可以连接成功。

      删除
  15. [root@ahalf tmp]# ipsec start --nofork
    Starting weakSwan 5.2.0 IPsec [starter]...
    /usr/local/etc/ipsec.conf:1: missing value for setting 'config'
    invalid config file '/usr/local/etc/ipsec.conf'
    unable to start strongSwan -- fatal errors in config
    请问这个问题怎么解决?
    /usr/local/etc/ipsec.conf的第一二行是
    config setup
    uniqueids=never
    前面步骤我都是跟着照做的
    ipsec start --nofork 就出现了上述错误

    回复删除
    回复
    1. 基本上这个是配置错误,我也不清楚问题在哪里。。。你可以尝试将config字段都注释掉,看看结果如何。

      删除
  16. ipsec是不是被封了,连接的时候我用tcpdump抓包,收不到从服务端发过来的握手信息,然后VPN客户端就显示未响应了,但是我在自家的nas搭建成功

    回复删除
    回复
    1. 补充一下,服务端的log有客户端的连接信息,重试了3次左右,然后就delete了

      删除
    2. ipsec正常啊,我想是不是你的服务器配置有问题,导致数据包无法回送。检查一下防火墙,通常你这个是Phase1就失败应该是封包被挡掉

      删除
  17. 此评论已被作者删除。

    回复删除
  18. 楼主 , 好像wp ikev2协议连接有些问题,wp认证过不去,走的是windows phone \ username ,我通过修改mschap和preprocess配置文件(with_ntdomain_hack = yes) 去除了这个windows phone的前缀,但是好像还有问题。求帮忙啊。
    一下是radius认证的记录。
    rad_recv: Access-Request packet from host 10.2.0.178 port 36356, id=148, length=165
    User-Name = "Windows Phone\\yxf001"
    NAS-Port-Type = Virtual
    Service-Type = Framed-User
    NAS-Port = 18
    NAS-Port-Id = "ikev2"
    NAS-IP-Address = 10.2.0.178
    Called-Station-Id = "10.2.0.178[4500]"
    Calling-Station-Id = "10.6.0.92[4500]"
    EAP-Message = 0x020000190157696e646f77732050686f6e655c797866303031
    NAS-Identifier = "strongSwan"
    Message-Authenticator = 0x68669463c92976a25ee52c34f789cd55
    +- entering group authorize {...}
    ++[preprocess] returns ok
    ++[chap] returns noop
    ++[mschap] returns noop
    [suffix] No '@' in User-Name = "yxf001", looking up realm NULL
    [suffix] No such realm "NULL"
    ++[suffix] returns noop
    [eap] EAP packet type response id 0 length 25
    [eap] No EAP Start, assuming it's an on-going EAP conversation
    ++[eap] returns updated
    [files] users: Matched entry DEFAULT at line 50
    [files] expand: /usr/local/bin/rmauth "%{NAS-IP-Address}" "%{User-Name}" "%{Calling-Station-Id}" -> /usr/local/bin/rmauth "10.2.0.178" "yxf001" "10.6.0.92[4500]"
    ++[files] returns ok
    [sql] expand: %{User-Name} -> yxf001
    [sql] sql_set_user escaped user --> 'yxf001'
    rlm_sql (sql): Reserving sql socket id: 3
    [sql] expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'yxf001' ORDER BY id
    [sql] User found in radcheck table
    [sql] expand: SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'yxf001' ORDER BY id
    [sql] expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'yxf001' ORDER BY priority
    rlm_sql (sql): Released sql socket id: 3
    ++[sql] returns ok
    ++[expiration] returns noop
    ++[logintime] returns noop
    [pap] Found existing Auth-Type, not changing it.
    ++[pap] returns noop
    Found Auth-Type = EAP
    +- entering group authenticate {...}
    [eap] Identity does not match User-Name, setting from EAP Identity.
    [eap] Failed in handler
    ++[eap] returns invalid
    Failed to authenticate the user.
    Using Post-Auth-Type Reject
    +- entering group REJECT {...}
    [attr_filter.access_reject] expand: %{User-Name} -> yxf001
    attr_filter: Matched entry DEFAULT at line 11
    ++[attr_filter.access_reject] returns updated
    Delaying reject of request 1 for 1 seconds
    Going to the next request
    Waking up in 0.9 seconds.
    Sending delayed reject for request 1
    Sending Access-Reject of id 148 to 10.2.0.178 port 36356

    回复删除
  19. 安装StrongSwan需要libpam0g-dev依赖。折腾了半天安装不上才发现了这个(

    回复删除
  20. 11[CFG] sending RADIUS Access-Request to server 'primary'
    11[CFG] receiving RADIUS message failed: Connection refused

    freeradius那边全程没反应,iOS设备提示鉴定失败……
    怎么破

    回复删除
  21. 运行一段时间后,空闲内存越来越少,直至宕机。宕机前,如果重启ipsec,可以恢复空闲内存。用top查看,没有占用超过2%的进程,似乎是把流量数据都存储在内存里了?运行环境是32位Debian7,怎么查看是什么占据了内存?这个问题怎么解决?求帮助~

    回复删除
  22. 此评论已被作者删除。

    回复删除
  23. 牛兄,我按照你的教程搭建了ipsec,可是有个问题啊,我的第一台设备连上之后,其他的设备就再也连不上了,不能同时多台设备连接啊,还望指教

    回复删除
  24. 首先谢谢楼主无私的分享,现在要上个网太累了!我最近也在ubuntu上用strongswan搭建了一个vps,一个服务器在国内,一个服务器在国外。我是strongswan的android客户端,对于国内这台服务器,能够建立vpn连接,但是手机无法上网。同样的配置,香港的服务器直接就用户认证失败了。不知道是什么原因,找了好久都没有头绪。还请楼主指点下。我的邮箱xiachen8818@gmail.com

    回复删除
  25. 此评论已被作者删除。

    回复删除
  26. 此评论已被作者删除。

    回复删除
  27. 只有一个客户端blackberry9900,不配另外认证服务,只用ipsec.secret,已安装好strongswan。但连接总不成功,付费求博主帮忙,可以吗?可以的话,留个信息,或者liangzhdp at gmail.com
    04[NET] received packet: from xxxxxxxxxxxxx[500] to xxxxxxxxxxxxxx[500] (1302 bytes)
    04[ENC] parsed AGGRESSIVE request 0 [ SA KE No ID V V V V V V V V V ]
    04[IKE] received XAuth vendor ID
    04[IKE] received Cisco Unity vendor ID
    04[IKE] received NAT-T (RFC 3947) vendor ID
    04[IKE] received draft-ietf-ipsec-nat-t-ike-03 vendor ID
    04[IKE] received draft-ietf-ipsec-nat-t-ike-02\n vendor ID
    04[IKE] received draft-ietf-ipsec-nat-t-ike-02 vendor ID
    04[ENC] received unknown vendor ID: 16:f6:ca:16:e4:a4:06:6d:83:82:1a:0f:0a:ea:a8:62
    04[IKE] received draft-ietf-ipsec-nat-t-ike-00 vendor ID
    04[IKE] received DPD vendor ID
    04[IKE] xxxxxxxxxxxxxxxx is initiating a Aggressive Mode IKE_SA
    04[IKE] Aggressive Mode PSK disabled for security reasons
    04[ENC] generating INFORMATIONAL_V1 request 1318290838 [ N(AUTH_FAILED) ]
    04[NET] sending packet: from xxxxxxxxxxx[500] to xxxxxxxxxxxxxxx[500] (56 bytes)

    回复删除
  28. Aggressive Mode PSK disabled for security reasons

    PSK问题,或者是你的 strongswan.conf没有加一条配置。新的strongswan.conf需要添加

    i_dont_care_about_security_and_use_aggressive_mode_psk = yes

    到 charon {}中。 官方手册上有。我的文章是旧的了,应该找个时间更新一下

    回复删除
    回复
    1. 此评论已被作者删除。

      删除
    2. 非常感谢牛兄指教,9900、playbook都成功连接vpn,playbook亦翻墙成功,9900完全翻不了墙,但无论服务器端或9900上都显示连接了,所以应该是别的原因。
      再次感谢。

      删除
  29. 此评论已被作者删除。

    回复删除
  30. 牛兄:实现bb10(playbook)ike1和ike2的方法,但黑莓老系统9900上始终是能登录vpn服务器,但不能翻墙,求指教。
    #psec.conf - strongSwan IPsec configuration file

    config setup
    uniqueids=never

    conn %default
    keyexchange=ike
    dpdaction=clear
    dpddelay=300s
    left=%any
    right=%any
    leftsubnet=0.0.0.0/0
    leftcert=vpnHostCert.pem
    rightdns=8.8.8.8,8.8.4.4
    rightsourceip=192.168.99.0/24

    conn CiscoIPSec_blackberry_playbook
    keyexchange=ikev1
    auto=add
    aggressive=yes
    compress=yes
    ike=aes256-sha1-modp1024!
    esp=aes256-sha1!
    leftid=conoha
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    leftfirewall=yes

    conn ikev2_playbook
    rekey=no
    leftsubnet=0.0.0.0/0
    leftauth=psk
    leftid=ip地址
    right=%any
    rightauth=eap-mschapv2
    rightsendcert=never
    eap_identity=%any
    auto=add

    回复删除
  31. 铁牛兄:找到这篇专门针对bbos配置的文章,完全按着来操作还是不成功。我送你一部9000,给vps的ssh账号你帮我上去分析分析好吗?
    https://geekvittles.wordpress.com/2012/12/04/strongswan-bbos/

    回复删除
  32. 哇,经典机型 Bold 9000,你还是留着收藏吧。
    不过不必使用他的方法,直接使用 username + password + PSK 就可以登录使用。选的时候使用 cisco pix 系列。但是我记得 bbos麻烦的地方是要符合上面设置的加密 和 HASH方式才行。错一项就会不成功。


    我只有 Q10 的 cisco pix 535模式可用,理论上应该跟你的是一样的,但是我可以成功。我过几天得空把我的新版 strongswan 配置发出来。

    回复删除
    回复
    1. 早知你系资深莓友,好,我等你配置出来再说。

      删除

发表评论

读过之后是不是文思泉涌了?快快让大家拜读一下你的高见吧~~~

此博客中的热门博文

简易 APN Proxy (APN代理)的搭建

2012年2月1日 ,新增加了一种方案,请看 《 搭建增强型代理服务器(APN Proxy) 》 2012-01-03 更新 3proxy 及 监控进程脚本,分别见 B 3) 和 曾经在twitter被封锁的时候,我在长城宽带干过一件事,那就是将twitter的请求和通讯使用SSH,让全网用户可以无阻访问,不过也因此付出了代价,略不去说了。 后来得厨神 @paveo 的创意,何不将其用在手机等移动设备上?厨神的APN现在已经很成熟并在免费有限量专供中。我今天这里写得,是如何搭建自己的APN Proxy(APN 代理),但在阅读下面内容之前,需要一个刚性要求:一台在国内的Unix-Like的主机(可以是Linux/FreeBSD/Mac Osx Server/Solaris等等)并且是公网IP地址以及在国外的VPS主机(Unix类)。这个要求可以看出成本比较高,所以我看到淘宝上已经有人开始出售APN代理了,这个可以理解。 第一部分 原理 原理图1 如上图所示,我们要实现的功能原理是,将上网请求先发送到“国内VPS”,再由“国内VPS”通过SSH隧道转送到国外,最终实现无阻上网。点击查看大图可以看出,主要配置是在“国内VPS”上,包括配置SSH -D、Squid、Privoxy或者Polipo(socks代理程序你可以选自己喜欢的)。 第二 配置 1 国外VPS 国外VPS上,你需要有一个SSH帐户,并且请注意,使用密钥方式登录你的SSH而非密码,之所以如此,是为了下一步建立长久的SSH以及断线自动重连做准备,这个很重要。关于“SSH 免密码 密钥 登录”请使用google看一下。 这里有一个小插曲,部分centos 上如果默认的话,SSH帐户会报错,大约 是adminitstatly close之类,这有可能是 openfile数目问题,可以轻松解决。我非Linux爱好者,所以是临时google,并没有记录下来,你只要记得如果遇到同样问题,5分钟之内就可以google解决。 2 国内VPS 这一节将会是我们的主战场,基本上,我将会按下面的逻辑图来进行配置,这其中会涉及很多文件的配置,需要你注意哦,最后部分我会提供部分配置文档下载,由于我使用的是FreeBSD,因此会有少量差

OCSERV 0.8.5 使用

*注1:本文不包含ocserv的编译、安装,请自行研习 *注2:本文将包含ocserv的证书认证配置,不包含pam (radius)认证 *注3:本文将包含win,mac 端的使用,移动端相对简单,不做介绍 ocserv是OpenConnect SERVer的缩写,基本上就是cisco anyyconnect的开源兼容服务器软件,好处就是这个软件使用的是SSL VPN方式,通常会用DTLS这一层,支持服务器端推送32条路由,实现国内国外按需区分路由;同时各种客户端会长连接方式,一直后台待命,省时省电。我就不废话了。 我的配置是采用了全证书的方式进行,因此不需要用户名密码,如果您要对客户端进行限制,计时方面可以采用证书有效时间;流量限制方面可以使用iptables针对IP进行限制;同时在线人数上如果是多台服务器的话,相互间无法限制(cookie/session分布于不同服务器),如果仅一台服务器话就可以在配置文件搞定。我的完全配置如下,如果你要复制配置文件可以到 这里 : #第一行用以指定认证方式,我是证书 auth = "certificate" #Added @05-10-2014 #加入这个后就可以使用occtl了 #occtl reload && occtl stop now use-occtl = true occtl-socket-file = /var/run/occtl.socket # seccomp default : true #关闭这个可以提高性能,牺牲一丁点安全,更可以避免无法启动的情况(遇到过的都知道那痛苦) use-seccomp = false # listen-host = 0.0.0.0 #最大客户端数量,根据你的服务器IP地址分配多少以及性能设置,自用的话不必很大 max-clients = 36 #这个看英文就知道意思了,你可以加以限制 max-same-clients = 4 tcp-port = 443 udp-port = 443 keepalive = 32400 dpd = 60 mobile-dpd = 1800 #故意为空 mobile-idle-timeout = deny-roaming = false