一、配置Server端,自行编译的openwrt已经加入了ocserv luci-app-ocserv2个包
建议通过luci界面配置,比较直观和容易。
通过“服务”——“OpenConnect VPN”,进到“服务器设置”的“常规设置”,相关参数如下:
1、Enable Server:打钩表示启动服务。
2、User Authentication:用户认证方式,选择plain,表示使用OpenWRT路由器上面定义的用户名和密码登录VPN。
3、Firewall Zone:选择Lan
4、端口:默认是443,但如果443被占用(例如开始了https访问luci)就会自动修改为4433,这里可以修改其他想要端口。
5、最大连接数:默认为8,这里的值是设定有个VPN可以连接进来。
6、Max same Clients:默认为2,这里的值会限定同一个账号能够登录几次。
7、Enable compression:打钩表示启用压缩。
8、Enable UDP:打钩表示启用UDP协议。
9、AnyConnect client compatibility:打钩表示允许 Cisco 的 Anyconnect Client 作为VPN客户端软件连接。
比较关键的是下面两个参数:
10、VPN IPv4-Network-Address:
11、VPN IPv4-Netmask:
这里定义的是VPN客户端连到内网之后,获得的IP地址的网段范围。可以有两种设置方法:
方法一、VPN 网段和OpenWRT所在的网段不同,用这种方法要在后面的Routing Table里面添加2个路由网段。
例如:OpenWRT的路由器的IP地址为:172.16.1.1,子网掩码为255.255.255.0
VPN的地址可以设置为:172.16.2.0,子网掩码为 255.255.255.0【注意,这里VPN设置的只是网络号,VPN服务器将会使用网络的第一个地址,即为172.16.2.1】
方法二、VPN 网段和OpenWRT所在的网段一样(使用其中某一段子网IP地址),这种情况下Routing Table里面的路由只需要添加一个,但是要启用所有接口上的ARP代理功能(启用方法参看最后)
例如:OpenWRT的路由器的IP地址为:172.16.1.1,子网掩码为255.255.255.0
VPN的地址可以设置为:172.16.1.16,子网掩码为 255.255.255.240【注意,这里的172.16.1.16/28其实是一个网络号,VPN 服务器将会使用第一个地址,即172.16.1.17/29,VPN 客户端将使用剩余的其中一个地址18-30,这里的参考配置可以供13个客户端使用】
【再注意,OpenWRT所在的网络的DHCP分配的地址要排除这段里面的IP不分配给客户端16-31,防止IP地址冲突 】
二、配置DNS Server
VPN线路连接成功之后,因为默认的模式“分离隧道”,所以客户端的DNS Server将会被这里的配置所覆盖。
一般情况下,家里的OpenWRt路由器也承担DNS的功能,所以这里设置为OpenWRT的路由器地址即可。
如果采用方法一设置的,因为并不是所有的DNS都会转给路由器,那么最好留空,这样可以采用本地的DNS。
三、配置Routing table,路由表。
这里的设置的路由表,将会分配给VPN 客户端,告知VPN 客户端 通过VPN线路访问这里定义的路由。
一般情况下,这里只需要添加“VPN的IP网段”和“OpenWRT所在的网段”。
具体说明,参看上面配置 VPN IPv4-Network-Address 和 VPN IPv4-Netmask的两种情况,分别定义的路由表为:
方法一对应的路由表为:
172.16.1.0 255.255.255.0
172.16.2.0 255.255.255.0
方法二对应的路由表为:
172.16.1.0 255.255.255.0
经过测试和研究:
1、如果这里不填写任意网段,VPN Client 将使用Tunnel all Traffice模式,即设置客户端所有的流量发往OpenWRT,即新增一条默认路由到OpenWRT访问所有网络。
2、如果填写网段,VPN Clinet将使用 Split Tunnel的分离隧道模式,只有指定的网段流量才通过VPN房网OpenWRT。
3、VPN Client不需要添加,会自动发送给客户端。
四、配置拨号用户
当配置了用户认证方法为“plain”,并启用了OpenConnect服务之后,就可以新建用户了。新建用户很简单,只需要定义用户名和密码即可。
在“服务”——“Openconnect VPN”——“用户设置”——“Available users”
五、配置防火墙,允许从wan访问 VPN的端口,建立连接。
前面定义的端口为4443,并且允许TCP和UDP两种模式,所以这两个端口都需要允许。
可以通过命令行和luci进行配置。
config rule
option enabled ‘1’
option target ‘ACCEPT’
option name ‘Allow SSL vpn in ‘
option family ‘ipv4’
option dest_port ‘4443’
option src ‘wan’
配置完毕之后需要重启防火墙生效。
/etc/init.d/firewall restart
或者通过luci进行配置:网络——防火墙——自定义规则,添加上面的内容。
六、自动启动ocserv
设置自动启动
/etc/init.d/ocserv enable
启动
/etc/init.d/ocserv start
如果出现启动后无法使用的问题,那么做个延时在rc.local里面
设置过的ocserv随路由器开机自启动的功能有时可能会失效,可以在 /etc/rc.local文件中添加两行
sleep 5
/etc/init.d/ocserv restart
还可以创建一个检查用脚本(以防ocserv进程意外被杀),如 /root/ocservup.sh,内容如下
#!/bin/sh killall -0 ocserv 2> /dev/null if [ $? != 0 ] then logger \"$0: Starting ocserv ...\" /usr/sbin/ocserv -c /var/etc/ocserv.conf else logger \"$0: ocserv already running: $(pidof ocserv)\" fi
注:创建后需执行 chmod +x /root/ocservup.sh,以添加可执行属性。
然后把该脚本添加到定时任务 /etc/crontabs/root
3 */2 * * * /root/ocservup.sh #每两小时检查一次
七、允许内网相互访问
通过命令行,对/etc/firewall.user 进行编辑,添加以下内容
iptables -A input_rule -i vpns+ -j ACCEPT iptables -A forwarding_rule -i vpns+ -j ACCEPT iptables -A forwarding_rule -o vpns+ -j ACCEPT iptables -A output_rule -o vpns+ -j ACCEPT
配置完毕之后需要重启防火墙生效。
/etc/init.d/firewall restart
或者通过luci进行配置:网络——防火墙——自定义规则,添加上面的内容。
八、启用 代理ARP
如果VPN 网段和 OpenWRt网段处于不同的IP网段,无需开启代理ARP。
但是如果为了节省IP要求,将VPN网段和OpenWRT设置为同一网段IP的情况下,虽然我们从IP的角度看,我们客户端的VPN IP网段和资源网段处于同一网段,应该可以直接访问。但实际上面,有一个虚拟的VPN接口,这两个是不同的网段,所以路由其实是不可达的。这个时候如果想要两个网络互通,就必须启用 代理ARP功能,以供VPN IP网段和资源网段进行互通。这个必须在命令行下面进行配置。
通过telnet或者ssh登录OpenWRT路由器,用vi 编辑 /etc/sysctl.conf :
新增一条:
net.ipv4.conf.all.proxy_arp=1
然后重新加载配置,用下述命令:
sysctl -p
即可成功。
启用 代理ARP有诸多风险,建议大家还是用不同网段配置VPN IP和Openwrt网段。
这样,Open Connect VPN的服务器端就已经配置成功了。
如果启动有error: unknown user: ocserv问题,那么增加运行的用户与用户组
ocserv