close

使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

home

使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

bao3.blogspot.com

使用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来达到冗余。


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





Share

65 Comments on 莓玩没了™: 使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

  • Unknown
    on May 06, 2013 | 11:07 Unknownsaid :
    "感谢铁牛兄的教程,一个小修正:
    strongswan.conf的eap-radius中不应有eap_start=yes,这样反而会造成strongswan不发送eap message从而无法认证."
  • 铁牛
    on May 06, 2013 | 16:16 铁牛said :
    "已经修正"
  • andy
    on May 08, 2013 | 00:18 andysaid :
    "牛兄,已经8号了,没看到教程,失望!!!"
  • 铁牛
    on May 08, 2013 | 03:45 铁牛said :
    "兄台,今夜在解决一些棘手的问题,看着回复时间你就知道我没有睡觉。。。。。现在是凌晨3:43.解决了strongswan 在FreeBSD下一些奇怪的问题,解决了SSH使用Radius认证的问题,解决了mysql多台间同步异常的问题,抱歉,很累,估计要白天更新一下。"
  • andy
    on May 08, 2013 | 17:00 andysaid :
    "牛兄,不好意思,凌晨我是开个玩笑的,请注意身体,我自己也写博客,要用心写好文章其实很花时间的。按你的意思,你在每台服务器上都是安装了独立的Radius服务器,如果是这样的话,各台服务器之间mysql是怎么同步的,能否指定下,谢谢!
    不好意思,我对mysql和linux的掌握的不是很好。"
  • Unknown
    on May 08, 2013 | 22:00 Unknownsaid :
    "此评论已被作者删除。"
  • 铁牛
    on May 08, 2013 | 23:58 铁牛said :
    "可同步,我用的就是同步。"
  • Richard Bird
    on May 12, 2013 | 13:36 Richard Birdsaid :
    "感谢分享。已知BUG:同一ip下,2个设备用一个账号使用ciscoipsec登陆的话,会造成其中一方无法连接....之前用的racoon则没这问题"
  • 铁牛
    on May 12, 2013 | 16:31 铁牛said :
    "谢谢反馈,我去strongswan mailist看看。"
  • andy
    on May 12, 2013 | 17:30 andysaid :
    "牛凶,执行到这里出现这个错误该怎么解决:
    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了好久没找到原因,请指点下,谢谢!"
  • 铁牛
    on May 12, 2013 | 17:42 铁牛said :
    "我不确定你的问题在哪里,根据提示:

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

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

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

    4 另外,我恰好今天更新了一下strongswan,ipsec两个配置文件,在开头有说明,你看一下。"
  • andy
    on May 12, 2013 | 21:26 andysaid :
    "牛兄,我的环境是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"
  • 铁牛
    on May 12, 2013 | 22:05 铁牛said :
    "这个我实在无法解决。其实你也可以直接使用startssl 的证书而不必自己生成。"
  • Unknown
    on May 12, 2013 | 22:42 Unknownsaid :
    "config setup里面加个uniqueids=never即可"
  • Richard Bird
    on May 14, 2013 | 14:35 Richard Birdsaid :
    "小问题而已,不影响使用。

    参见http://bazaar.launchpad.net/~vcs-imports/strongswan/master/revision/9790"
  • andy
    on May 15, 2013 | 23:10 andysaid :
    "已经顺利解决生成证书的错误,Richard,对你来说可能是个小问题,却困扰我两天了,感谢两位的帮助"
  • 铁牛
    on May 16, 2013 | 14:06 铁牛said :
    "andy兄,如何解决的?"
  • Richard Bird
    on May 16, 2013 | 22:36 Richard Birdsaid :
    "andy, 我制作证书时也有提示这个错误,但是用起来毫无问题....不知道你那里是什么问题呢"
  • Mengmeng Wang
    on May 23, 2013 | 15:10 Mengmeng Wangsaid :
    "铁牛兄,按照配置我搭建一遍,验证过不去,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服务器那边去?这个是什么原因啊"
  • 铁牛
    on May 24, 2013 | 13:06 铁牛said :
    "这个你要自己调试radius才可以,可能是radius中secret不对,也可能是用户密码的问题。"
  • Mengmeng Wang
    on May 30, 2013 | 16:28 Mengmeng Wangsaid :
    "谢 铁牛兄,我现在用shrew vpn client 能连接但是不能翻墙,这是什么问题啊?"
  • Wangdef nine
    on June 27, 2013 | 02:04 Wangdef ninesaid :
    "博主你好:
    系统是ubuntu server,root登录,个人用不需要账户管理应该如何修改配置?此外,按您的配置,ios登录提示用户鉴定失败,是否是没有安装 FreeRadius,pptpd,pppd,mysql-server daloradius 这些的原因,还是需要用新建的用户登录系统,并启动strongwan ipsec服务?
    "
  • Peter
    on July 20, 2013 | 17:16 Petersaid :
    "牛胸,按您的配置下来,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
    不知道该如何修改?谢谢"
  • 陈磊
    on August 15, 2013 | 20:46 陈磊said :
    "我是用了另外搭建的一个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地址
    "
  • 铁牛
    on August 17, 2013 | 16:18 铁牛said :
    "兄弟,看提示,是没有找到正确的config,需要你检查一下你的客户端配置是否与服务端匹配。如果你是android,用这个配置就100%不能连接了。这个好像是android的bug。需要另写配置。"
  • 陈磊
    on August 21, 2013 | 22:10 陈磊said :
    "我用的是mac os 自带的vpn配置,选择了cisco ipsec配置的
    no IKE config指的是客户端的配置问题么?
    我是mac ox应该怎么配置呢?"
  • Mengmeng Wang
    on August 27, 2013 | 15:46 Mengmeng Wangsaid :
    "@铁牛 @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。请问这是什么问题?"
  • Mengmeng Wang
    on August 28, 2013 | 14:12 Mengmeng Wangsaid :
    "ipsec pki --gen --outform pem > serverKey.pem"
  • Unknown
    on October 26, 2013 | 12:41 Unknownsaid :
    "请问铁牛兄,在strongswan.conf中的radius server地址“radius.youname.org”,你用的是域名吗?为什么我使用域名失败,而用ip地址成功。使用域名时,在charon.log中的错误信息是“receiving RADIUS message failed : Connection refused”。请问你是否知道是由什么原因造成的?"
  • Unknown
    on October 27, 2013 | 18:24 Unknownsaid :
    "铁牛兄,我的问题是针对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放行所有进出流量,但也不成功。"
  • 铁牛
    on October 27, 2013 | 23:56 铁牛said :
    "Hi,我的也一样,我有3台vps,一台radius,都是使用域名连接,没有什么问题。我建议你尝试一下 dig 或者nslookup 看看是否是解析错误。你也可以直接修改 /etc/hosts,将你的域名和IP写进去来排除DNS故障。

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

    这个情况我也不确定怎么帮你。你或者可以暂时将iptable设定成全部都accept,也许也能奏效。"
  • Unknown
    on October 28, 2013 | 10:46 Unknownsaid :
    "非常感谢!按照你的思路,我查找到原因是DNS将域名解析成了ipv6地址,而我在radius server上没有打开对ipv6的监听,造成请求被拒绝。
    为供后人参考,打开ipv6监听的方法是修改radiusd.conf文件,添加两个listen字段,具体可参考http://www.embeddedsystemtesting.com/2012/11/how-to-enable-free-radius-server-for.html"
  • Mengmeng Wang
    on December 25, 2013 | 18:22 Mengmeng Wangsaid :
    "铁牛兄,我的一台vps 运行了一段时间发现 charon进程好像假死了一样,ikev1 l2tp over ipsec都连接不上。
    ipsec 任何命令都不能用,ipsec status 看状态一直挂在那里也不退出,ps 查看进程也在,就是不能连。不知铁牛兄有没有遇到这样的情况? "
  • 杨晓飞
    on December 27, 2013 | 11:34 杨晓飞said :
    "牛兄 能提供ssh使用radius认证的教程嘛?"
  • 铁牛
    on December 27, 2013 | 14:02 铁牛said :
    "这个我没有遇到过,不过你可以尝试检查是否是内存swap都满了?或者是500, 4500端口问题"
  • 铁牛
    on December 27, 2013 | 14:03 铁牛said :
    "这个我没有遇到过,不过你可以尝试检查是否是内存swap都满了?或者是500, 4500端口问题"
  • 铁牛
    on December 27, 2013 | 14:04 铁牛said :
    "可能已经回复你太晚,你的这个问题应该是客户端连接你的服务器时,没有办法找到对应的conn ,也就说说,你的参数匹配有问题。"
  • Ruxiao Ma
    on April 04, 2014 | 14:35 Ruxiao Masaid :
    "您好,我正在配置 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 错误。请问如何解决?"
  • EJG
    on August 10, 2014 | 22:29 EJGsaid :
    "[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 就出现了上述错误"
  • GJ Deng
    on August 21, 2014 | 07:28 GJ Dengsaid :
    "ipsec是不是被封了,连接的时候我用tcpdump抓包,收不到从服务端发过来的握手信息,然后VPN客户端就显示未响应了,但是我在自家的nas搭建成功"
  • GJ Deng
    on August 21, 2014 | 07:29 GJ Dengsaid :
    "补充一下,服务端的log有客户端的连接信息,重试了3次左右,然后就delete了"
  • 铁牛
    on August 21, 2014 | 10:05 铁牛said :
    "ipsec正常啊,我想是不是你的服务器配置有问题,导致数据包无法回送。检查一下防火墙,通常你这个是Phase1就失败应该是封包被挡掉"
  • 铁牛
    on August 21, 2014 | 10:07 铁牛said :
    "基本上这个是配置错误,我也不清楚问题在哪里。。。你可以尝试将config字段都注释掉,看看结果如何。"
  • 铁牛
    on August 21, 2014 | 10:09 铁牛said :
    "windows下,你需要先将证书,通过控制台倒入到电脑(win7之前),但是win8可以偷懒。这样,win才可以连接成功。"
  • yiqun zhang
    on September 04, 2014 | 11:28 yiqun zhangsaid :
    "此评论已被作者删除。"
  • 杨晓飞
    on November 13, 2014 | 11:32 杨晓飞said :
    "楼主 , 好像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"
  • 粒粒橙
    on January 28, 2015 | 12:15 粒粒橙said :
    "安装StrongSwan需要libpam0g-dev依赖。折腾了半天安装不上才发现了这个("
  • 粒粒橙
    on January 28, 2015 | 21:21 粒粒橙said :
    "11[CFG] sending RADIUS Access-Request to server 'primary'
    11[CFG] receiving RADIUS message failed: Connection refused

    freeradius那边全程没反应,iOS设备提示鉴定失败……
    怎么破"
  • Ming Wen
    on March 17, 2015 | 23:06 Ming Wensaid :
    "运行一段时间后,空闲内存越来越少,直至宕机。宕机前,如果重启ipsec,可以恢复空闲内存。用top查看,没有占用超过2%的进程,似乎是把流量数据都存储在内存里了?运行环境是32位Debian7,怎么查看是什么占据了内存?这个问题怎么解决?求帮助~"
  • Marven Casimir
    on April 14, 2015 | 13:28 Marven Casimirsaid :
    "此评论已被作者删除。"
  • David Du
    on June 26, 2015 | 00:10 David Dusaid :
    "此评论已被作者删除。"
  • Jinbo Sun
    on September 12, 2015 | 16:48 Jinbo Sunsaid :
    "牛兄,我按照你的教程搭建了ipsec,可是有个问题啊,我的第一台设备连上之后,其他的设备就再也连不上了,不能同时多台设备连接啊,还望指教"
  • 谷立峰
    on September 22, 2015 | 22:29 谷立峰said :
    "学习中."
  • xiacheng
    on December 22, 2015 | 10:14 xiachengsaid :
    "首先谢谢楼主无私的分享,现在要上个网太累了!我最近也在ubuntu上用strongswan搭建了一个vps,一个服务器在国内,一个服务器在国外。我是strongswan的android客户端,对于国内这台服务器,能够建立vpn连接,但是手机无法上网。同样的配置,香港的服务器直接就用户认证失败了。不知道是什么原因,找了好久都没有头绪。还请楼主指点下。我的邮箱xiachen8818@gmail.com"
  • Smallville L
    on January 03, 2016 | 16:57 Smallville Lsaid :
    "此评论已被作者删除。"
  • Smallville L
    on January 03, 2016 | 18:04 Smallville Lsaid :
    "此评论已被作者删除。"
  • Smallville L
    on January 03, 2016 | 18:06 Smallville Lsaid :
    "只有一个客户端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)"
  • 铁牛
    on January 04, 2016 | 10:44 铁牛said :
    " Aggressive Mode PSK disabled for security reasons

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

    i_dont_care_about_security_and_use_aggressive_mode_psk = yes

    到 charon {}中。 官方手册上有。我的文章是旧的了,应该找个时间更新一下"
  • Smallville L
    on January 06, 2016 | 19:31 Smallville Lsaid :
    "此评论已被作者删除。"
  • Smallville L
    on January 06, 2016 | 19:37 Smallville Lsaid :
    "此评论已被作者删除。"
  • Smallville L
    on January 06, 2016 | 23:38 Smallville Lsaid :
    "非常感谢牛兄指教,9900、playbook都成功连接vpn,playbook亦翻墙成功,9900完全翻不了墙,但无论服务器端或9900上都显示连接了,所以应该是别的原因。
    再次感谢。"
  • Smallville L
    on January 08, 2016 | 07:59 Smallville Lsaid :
    "牛兄:实现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
    "
  • Smallville L
    on January 10, 2016 | 12:53 Smallville Lsaid :
    "铁牛兄:找到这篇专门针对bbos配置的文章,完全按着来操作还是不成功。我送你一部9000,给vps的ssh账号你帮我上去分析分析好吗?
    https://geekvittles.wordpress.com/2012/12/04/strongswan-bbos/
    "
  • 铁牛
    on January 11, 2016 | 22:04 铁牛said :
    "哇,经典机型 Bold 9000,你还是留着收藏吧。
    不过不必使用他的方法,直接使用 username + password + PSK 就可以登录使用。选的时候使用 cisco pix 系列。但是我记得 bbos麻烦的地方是要符合上面设置的加密 和 HASH方式才行。错一项就会不成功。


    我只有 Q10 的 cisco pix 535模式可用,理论上应该跟你的是一样的,但是我可以成功。我过几天得空把我的新版 strongswan 配置发出来。"
  • Smallville L
    on January 11, 2016 | 22:18 Smallville Lsaid :
    "早知你系资深莓友,好,我等你配置出来再说。"

Report "使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器"

Are you sure you want to report this post for ?

Cancel
×