路由器多拨教程

1、路由器的选择:openwrt和pandora box理论上支持的CPU种类有很多,具体可以到各自官网上查看支持的机型和cpu,虽然低端的路由器如水星MW150r也可以刷入pandora系统,但前提需要对路由器进行硬改,更换rom和RAM芯片,不想折腾的同学我推荐一款路由器联想newifi mini,处理器:MT7260A 580MHz,ROM:16MB,内存:128MDDR2,配置可称上百元之内最高!(自己DIY)除外,京东价99元,在淘宝大概可以90元拿下,小米路由器虽然配置同newifi相同 ,但价格稍贵,青春版虽然便宜但配置稍低且不支持IEEE 802.11ac标准(5ghz wifi)。

2、路由助手:

http://www.xcloud.cc/static_download-xrouter_manager.html;

3、PandoraBox固件:到以下网址下载目录里的newifi pandora固件,有稳定版和测试版,按所需下载。

固件官网: http://downloads.openwrt.org.cn/PandoraBox

二、准备工作:

1、newifi mini 通电;

2、newifi mini用网线连接电脑(LAN口,蓝色)

3、下载好所需里面的路由助手和PandoraBox固件

继续阅读路由器多拨教程

chrome解锁页面右键限制

打开一个新的页面,输入以下网址

javascript:(function() { function R(a){ona = “on”+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R(“contextmenu”); R(“click”); R(“mousedown”); R(“mouseup”); R(“selectstart”);})()

Ctrl+D收藏网址,命名为解锁,之后再遇到有限制的页面,点击收藏栏中的“解锁”即可。

使用StrongSwan搭建IKEv2 VPN服务器

在我们生活的周围,通常要用到很多种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 的配置

其实在我的 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来达到冗余。

 

原文地址:http://bao3.blogspot.com/2013/05/racoonstrongswanvpn.html