恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13294|回复: 49

【原创】OpenWRT Chaos Calmer 使用 ocserv 来提供 virtual**服务

  [复制链接]
发表于 2016-4-15 20:29 | 显示全部楼层 |阅读模式
本帖最后由 fragranse 于 2016-4-18 19:03 编辑


2016-04-15 初稿
2016-04-18 补充Tunnel all Traffic(全流量) 和 Split Tunnel(隧道分离)部分。


在OpenWRT Chaos Calmer 15.05 通过使用 ocserv 来提供 virtual** 服务,连接到OpenWRT 路由器所在的内网,并访问内网资源。
2016-04-15
之前家里使用的是360的C301路由器,对官方固件的吐槽不再细说,看到坛友的大力推荐,尝试了刷了下OpenWRT,惊为天人,从此深陷其中不可自拔,唯有感谢H大,蝈大。

我现在使用的固件是蝈大的2016-02-27提供的R48808,访问地址如下,这个是 Chaos Calmer 15.05版的OpenWRT
https://www.right.com.cn/forum/thread-146171-1-1.html

最近的需求是:能够在外面通过网络访问家里的NAS资源,并且足够的安全。这种情况只能使用virtual**了。


最简单的virtual**配置应该就是 PPTP virtual**了,找了一些文档和资料,发现OpenWRT的版本从 Barrier Breaker 14.07 升级到  Chaos Calmer 15.05之后,PPTP virtual**已经不再提供官方支持,并且PPTP的TCP 1723端口也被ISP封的厉害。有朋友推荐使用Ocserv,基于OpenConnect的virtual**解决方案,并且可以支持Cisco的Anyconnect 客户端。(Cisco Anyconnect 软件的Moblie版本也可以用于 iOS和 Android 都有下载的,即配置成功后,手机也可以连接virtual**访问家里的资源。)


环境如下:
硬件:Qihoo 360 C301路由器
固件:OpenWrt Designated Driver by 981213 r48808 (OpenWRT Chaos Calmer 15.05)


一、安装 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 virtual**“选项


二、配置Server端
建议通过luci界面配置,比较直观和容易。
通过“服务”——“OpenConnect virtual**”,进到“服务器设置”的“常规设置”,相关参数如下:
1、Enable Server:打钩表示启动服务。
2、User Authentication:用户认证方式,选择plain,表示使用OpenWRT路由器上面定义的用户名和密码登录virtual**。
3、Firewall Zone:选择Lan
4、端口:默认是443,但如果443被占用(例如开始了https访问luci)就会自动修改为4433,这里可以修改其他想要端口。
5、最大连接数:默认为8,这里的值是设定有个virtual**可以连接进来。
6、Max same Clients:默认为2,这里的值会限定同一个账号能够登录几次。
7、Enable compression:打钩表示启用压缩。
8、Enable UDP:打钩表示启用UDP协议。
9、AnyConnect client compatibility:打钩表示允许 Cisco 的 Anyconnect Client 作为virtual**客户端软件连接。

比较关键的是下面两个参数:
10、virtual** IPv4-Network-Address:
11、virtual** IPv4-Netmask:


这里定义的是virtual**客户端连到内网之后,获得的IP地址的网段范围。可以有两种设置方法:
方法一、virtual** 网段和OpenWRT所在的网段不同,用这种方法要在后面的Routing Table里面添加2个路由网段。
例如:OpenWRT的路由器的IP地址为:192.168.111.1,子网掩码为255.255.255.0
           virtual**的地址可以设置为:192.168.112.0,子网掩码为 255.255.255.0【注意,这里virtual**设置的只是网络号,virtual**服务器将会使用网络的第一个地址,即为192.168.112.1】

方法二、virtual** 网段和OpenWRT所在的网段一样(使用其中某一段子网IP地址),这种情况下Routing Table里面的路由只需要添加一个,但是要启用 所有接口上的ARP代理功能(启用方法参看最后)
例如:OpenWRT的路由器的IP地址为:192.168.111.1,子网掩码为255.255.255.0
           virtual**的地址可以设置为:192.168.111.16,子网掩码为 255.255.255.240【注意,这里的192.168.111.16/28其实是一个网络号,virtual** 服务器将会使用第一个地址,即192.168.111.17/29,virtual** 客户端将使用剩余的其中一个地址18-30,这里的参考配置可以供13个客户端使用】
【再注意,OpenWRT所在的网络的DHCP分配的地址要排除这段里面的IP不分配给客户端16-31,防止IP地址冲突 】


二、配置DNS Server
virtual**线路连接成功之后,因为默认的模式“分离隧道”,所以客户端的DNS Server将会被这里的配置所覆盖。
一般情况下,家里的OpenWRt路由器也承担DNS的功能,所以这里设置为OpenWRT的路由器地址即可。


三、配置Routing table,路由表。
这里的设置的路由表,将会分配给virtual** 客户端,告知virtual** 客户端 通过virtual**线路访问这里定义的路由。
一般情况下,这里只需要添加“virtual**的IP网段”和“OpenWRT所在的网段”。
具体说明,参看上面配置 virtual** IPv4-Network-Address 和 virtual** 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、如果这里不填写任意网段,virtual** Client 将使用Tunnel all Traffice模式,即设置客户端所有的流量发往OpenWRT,即新增一条默认路由到OpenWRT访问所有网络。
2、如果填写网段,virtual** Clinet将使用 Split Tunnel的分离隧道模式,只有指定的网段流量才通过virtual**房网OpenWRT。
3、virtual** Client不需要添加,会自动发送给客户端。

四、配置拨号用户
当配置了用户认证方法为“plain”,并启用了OpenConnect服务之后,就可以新建用户了。新建用户很简单,只需要定义用户名和密码即可。
在“服务”——“Openconnect virtual**”——“用户设置”——“Available users”
4.png


五、配置防火墙,允许从wan访问 virtual**的端口,建立连接。
前面定义的端口为4443,并且允许TCP和UDP两种模式,所以这两个端口都需要允许。
可以通过命令行和luci进行配置。
config rule
        option enabled '1'
        option target 'ACCEPT'
        option name 'Allow SSL virtual** in '
        option family 'ipv4'
        option dest_port '4443'
        option src 'wan'


luci的配置为:网络——防火墙——通信规则:
2.png
1.png

此时,virtual**可以正常连接进来了,如果只需要连进来配置OpenWRT路由器,到这里已经可以了。
但是如果要访问其他的内网资源都无法访问,就需要以下配置。


六、配置自定义防火墙,允许virtual**的流量访问内网资源。
通过命令行,对/etc/firewall.user 进行编辑,添加以下内容
  1. iptables -A input_rule -i virtual**s+ -j ACCEPT
  2. iptables -A forwarding_rule -i virtual**s+ -j ACCEPT
  3. iptables -A forwarding_rule -o virtual**s+ -j ACCEPT
  4. iptables -A output_rule -o virtual**s+ -j ACCEPT
复制代码
配置完毕之后需要重启防火墙生效。
  1. /etc/init.d/firewall restart
复制代码

或者通过luci进行配置:网络——防火墙——自定义规则,添加上面的内容。
3.png
然后去:系统——启动项,里面重启防火墙服务:
5.jpg

这里如果希望不用重启马上看到效果,可以直接在命令行下输入上述4条命令,但是这种方式添加的iptables重启之后就失效。


七、启用 代理ARP
如果virtual** 网段和 OpenWRt网段处于不同的IP网段,无需开启代理ARP。
但是如果为了节省IP要求,将virtual**网段和OpenWRT设置为同一网段IP的情况下,虽然我们从IP的角度看,我们客户端的virtual** IP网段和资源网段处于同一网段,应该可以直接访问。但实际上面,有一个虚拟的virtual**接口,这两个是不同的网段,所以路由其实是不可达的。这个时候如果想要两个网络互通,就必须启用 代理ARP功能,以供virtual** IP网段和资源网段进行互通。这个必须在命令行下面进行配置。
通过telnet或者ssh登录OpenWRT路由器,用vi 编辑 /etc/sysctl.conf :
新增一条:
  1. net.ipv4.conf.all.proxy_arp=1
复制代码
然后重新加载配置,用下述命令:
  1. sysctl -p
复制代码
即可成功。

启用 代理ARP有诸多风险,建议大家还是用不同网段配置virtual** IP和Openwrt网段。

这样,Open Connect virtual**的服务器端就已经配置成功了。
【参看以下的文档说明,据说新版本ocserv-0.10.9-2 package,直接集成这个 代理ARP的选项,所以不需要修改sysctl了。】
https://github.com/openwrt/packages/tree/master/net/ocserv


八、Windows PC连接virtual**的方法
客户端推荐使用 Cisco AnyConnect
Cisco anyconnect的地址可以参看这里:
http://download.csdn.net/download/wangzhpwang/8425331

安装完毕之后,因为我们的域名或者IP是不受CA信任的,所以必须要取消客户端对不信任的服务器的连接。
打开客户端,点击左下角的齿轮
6.png

按照下图提示,取消打钩。
7.png

然后就可以输入 IP加端口,进行连接;
连接成功之后,有个不信任的提示,点击“Connect Anyway”继续;
输入用户名和密码,有个banner的提示,点击Accept接收;
最后再一次弹出不信任服务器的提示,点击“Connect Anyway”,即可连接成功。

建议OpenWRT绑定DDNS,这样可以使用域名访问了。


九、Ubuntu、iOS、Android的连接virtual**的方法
方法和Windows的大同小异,基本上只要安装好客户端,输入IP(或者域名)加上端口,即可连接成功。


十、注意事项:1、有的时候通过luci修改OpenConnect配置的时候,会发现卡住,这个时候通过命令
netstat -nat
参看端口的时候,发现 4443端口的监听没有,证明服务没有起来,这个时候可以通过命令重启ocserv服务。
/etc/init.d/ocserv reload
或者去 luci的 系统——启动项,去重启ocserv服务。

2、这里有个非常有趣的一个测试结果,如下图:
8.png
ping同一个地址,上面是配置到第五步,但是没有添加针对virtual**s0端口的流量放行,所以返回的错误是我的OpenWRT网关提示无法连接到端口。

配置了第六步之后,再次访问我家里网络的资源时候,提示是超时(这是因为我的virtual**网络和内网网络一样,但是没有开启 代理ARP)。这个时候去luci界面的“状态——防火墙”的关于新建的virtual**s+策略的数据包增加了4个,证明防火墙已经放行了。

最后配置第七步之后,可以访问192.168.111.148的资源了。


十一、如果感兴趣,可以直接编辑“编辑模板”服务——OpenConnect virtual**——服务器设置——OpenConnect——编辑模板
这里面的参数会涉及到一些自定义参数,例如banner的提示,还有里面的注释,有利于理解上述各种参数的意义。










我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-15 20:38 | 显示全部楼层
好帖,收藏了
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-15 21:37 | 显示全部楼层
好帖收藏
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-15 21:45 | 显示全部楼层
精彩教程帖。感谢分享!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-15 21:56 | 显示全部楼层
有意思
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-15 22:31 | 显示全部楼层
可不可以翻公司的墙,代理上网?
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-4-17 00:17 | 显示全部楼层
本帖最后由 fragranse 于 2016-4-17 13:01 编辑

上传下一Cisco AnyConnect的 Windows 客户端,3个压缩包,一共4M多,我只能上传4M的压缩包,所以分两天上传。

anyconnect-win-4.1.00028-pre-deploy-k9.part1.rar

2 MB, 下载次数: 12

anyconnect-win-4.1.00028-pre-deploy-k9.part3.rar

674.72 KB, 下载次数: 9

anyconnect-win-4.1.00028-pre-deploy-k9.part2.rar

2 MB, 下载次数: 12

我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-17 00:37 | 显示全部楼层
同样是C301的用户帮顶一下,C301确实可玩性不错,我刷了明月固件,另外装了adbyby,中继增强,以后就打算这样用了
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-17 09:35 来自手机 | 显示全部楼层
还是pptp virtual**方便点,不需要客户端就能登录了。

点评

BB 14.07版本的OpenWRT支持PPTP。关于CC15.05版本,我尝试安装: #opkg install kmod-pptp luci-proto-ppp Multiple packages (kmod-pptp and kmod-pptp) providing same name marked HOLD or PREFER. Using lates  详情 回复 发表于 2016-4-17 13:05
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-17 09:39 | 显示全部楼层
这个先收藏了,以后再慢慢学习
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-4-17 13:05 | 显示全部楼层
13062678135 发表于 2016-4-17 09:35
还是pptp virtual**方便点,不需要客户端就能登录了。

BB 14.07版本的OpenWRT支持PPTP。关于CC15.05版本,我尝试安装:
#opkg install kmod-pptp luci-proto-ppp
Multiple packages (kmod-pptp and kmod-pptp) providing same name marked HOLD or PREFER. Using latest.
Package kmod-pptp (4.1.13-1) installed in root is up to date.
Package luci-proto-ppp (git-15.347.16478-f1814da-1) installed in root is up to date.

但是根本没有办法启用,并且还没有luci进行参考验证,最终放弃了,才寻找 替代的 ocserv的、

我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-17 14:20 来自手机 | 显示全部楼层
cc15.05.1可以用啊   我一直在用
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-18 01:28 | 显示全部楼层
我按照你的教程安装成功后,每次路由器重启 ,ocserv启动不起来,必须手动启动,这是怎么回事啊

点评

设置自启动: /etc/init.d/ocserv enable 或者去LUCI 的系统,启动项里面启动。  详情 回复 发表于 2016-4-18 18:55
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-18 02:15 | 显示全部楼层
精致好教程
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-4-18 13:19 来自手机 | 显示全部楼层
收藏备用,感谢
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛 ( 苏ICP备05084872号-1 )

GMT+8, 2019-6-25 19:47

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表