Total Pageviews

Saturday, 13 August 2016

OpenWRT Chaos Calmer 使用 ocserv 来提供 VPN服务

原文:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=185098&page=1&authorid=143352

 在OpenWRT Chaos Calmer 15.05 通过使用 ocserv 来提供 VPN 服务,连接到OpenWRT 路由器所在的内网,并访问内网资源。 一、安装 Ocserv 可以通过命令行 或者 luci web界面安装两个软件”ocserv“和”luci-app-ocserv“ 1、命令行命令如下: opkg update opkg install ocserv luci-app-ocserv reboot 2、luci web界面 通过:系统——软件包,先刷新,然后搜索”ocserv“和”luci-app-ocserv“,并安装。 安装完成,重启之后,luci 的”服务“界面就会出现”OpenConnect VPN“选项 二、配置Server端 建议通过luci界面配置,比较直观和容易。 通过“服务”——“OpenConnect VPN”,进到“服务器设置”的“常规设置”,相关参数如下: 1、Enable Server:打钩表示启动服务。 2、User Authentication:用户认证方式,选择plain,表示使用OpenWRT路由器上面定义的用户名和密码登录VPN。 3、Firewall Zone:选择Lan 4、端口:默认是443,但如果443被占用(例如开始了https访问luci)就会自动修改为4443,这里可以修改其他想要端口。 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地址为:192.168.111.1,子网掩码为255.255.255.0 VPN的地址可以设置为:192.168.112.0,子网掩码为 255.255.255.0【注意,这里VPN设置的只是网络号,VPN服务器将会使用网络的第一个地址,即为192.168.112.1】 方法二、VPN 网段和OpenWRT所在的网段一样(使用其中某一段子网IP地址),这种情况下Routing Table里面的路由只需要添加一个,但是要启用 所有接口上的ARP代理功能(启用方法参看最后) 例如:OpenWRT的路由器的IP地址为:192.168.111.1,子网掩码为255.255.255.0 VPN的地址可以设置为:192.168.111.16,子网掩码为 255.255.255.240【注意,这里的192.168.111.16/28其实是一个网络号,VPN 服务器将会使用第一个地址,即192.168.111.17/29,VPN 客户端将使用剩余的其中一个地址18-30,这里的参考配置可以供13个客户端使用】 【再注意,OpenWRT所在的网络的DHCP分配的地址要排除这段里面的IP不分配给客户端16-31,防止IP地址冲突 】 二、配置DNS Server VPN线路连接成功之后,因为默认的模式“分离隧道”,所以客户端的DNS Server将会被这里的配置所覆盖。 一般情况下,家里的OpenWRt路由器也承担DNS的功能,所以这里设置为OpenWRT的路由器地址即可。 三、配置Routing table,路由表。 这里的设置的路由表,将会分配给VPN 客户端,告知VPN 客户端 通过VPN线路访问这里定义的路由。 一般情况下,这里只需要添加“VPN的IP网段”和“OpenWRT所在的网段”。 具体说明,参看上面配置 VPN IPv4-Network-Address 和 VPN IPv4-Netmask的两种情况,分别定义的路由表为: 方法一对应的路由表为: 192.168.111.0 255.255.255.0 192.168.112.0 255.255.255.0 方法二对应的路由表为: 192.168.111.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' luci的配置为:网络——防火墙——通信规则: 此时,VPN可以正常连接进来了,如果只需要连进来配置OpenWRT路由器,到这里已经可以了。 但是如果要访问其他的内网资源都无法访问,就需要以下配置。 六、配置自定义防火墙,允许VPN的流量访问内网资源。 通过命令行,对/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进行配置:网络——防火墙——自定义规则,添加上面的内容。 然后去:系统——启动项,里面重启防火墙服务: 这里如果希望不用重启马上看到效果,可以直接在命令行下输入上述4条命令,但是这种方式添加的iptables重启之后就失效。 windows客户端下载: 手机请在市场中搜索:AnyConnect ================================= ocserv默认可以设置路由为全局或者智能区分流量,但是如果有时候要用到全局(比如打外网游戏)有时候又只用智能区分流量(比如普通上网),那该怎么办呢? 这里就可以使用ocserv的分组功能了.这里我们创建两个分组,一个是全局分组(All)一个是智能区分流量分组(Route). 首先切换认证模式到 auth = "plain[/etc/ocserv/ocpasswd]" 如果之前使用的是证书认证模式,取消证书验证模式. 清空掉ocserv.conf里的路由表. 注释掉下面这些代码: 1 2 3 4 select - group = Route select - group = All auto - select - group = false config - per - group = / etc / ocserv / config - per - group 创建用于放置分组配置的文件: mkdir /etc/ocserv/config-per-group 在文件夹里面创建两个文件,并分别写入规则. Route: 执行下面命令. 1 wget https : //raw.githubusercontent.com/CNMan/ocserv-cn-no-route/master/cn-no-route.txt -O /etc/ocserv/config-per-group/Route 对于全局流量 在 config-per-group文件夹里创建一个All文件并写入下面代码. 1 2 route = 0.0.0.0 / 128.0.0.0 route = 128.0.0.0 / 128.0.0.0 对于分组用户 username为自定义的用户名,切记千万不要同时将一个用户添加到两个不同的分组: 1 ocpasswd - c / etc / ocserv / ocpasswd - g "All" username 最后重启ocserv即可,