使用 MorganOnBass/docker-openconnect-ldap: Docker OpenConnect VPN Server 这个 docker 部署了 ocserv 镜像, 测试功能是正常的, 但是一旦开启分组隧道就会有问题. 个人需求是只有 vpn 服务器所在的局域网网段才走 vpn 代理流量, 其余全部走客户端本地的网咯. 其中 vpn 服务器所在的局域网网段不仅指 vpn 创建的虚拟网段, 更重要的是 ocserv 部署前就存在的私网网段.
vpn 服务器所在的局域网网段是 192.168.30.x, 所以配置了 ocserv 的 route=192.168.30.0/24, 内网 dns 为 192.168.30.1. 但是一旦开启这个参数, 就无法通过内网域名访问内网服务了, 只有 192.168.30.x 的内网 ip 访问可行.
测试过连上 vpn 前后的客户端在百度显示的公网 ip 变化, 增加 route 字段配置前后, 公网 ip 确实从 vpn 服务器所在公网 ip 变成了 客户端自己所在网络的公网 ip, 证明分组确实生效了.
尝试过将内网域名写入 split-dns 字段, 并指定 dns 字段配置为 192.168.30.1(内网域名在这里可以解析), 但还是不行. 个人对 split-dns 功能的理解: split-dns 指定的域名会走 ocserv 配置的 dns 的地址(dns=xxxx)去解析域名? 不知道这么理解是否正确?
看到过不用 docker 的 ocserv 教程, 似乎还要增加一些 iptables 规则, 不知道跟这个是否有关系?
1
cndns 231 天前 via Android
分流吗
|
3
ranaanna 231 天前
1. 123 特别是 3 ,理解全部正确。
2. 4 ,既然 2 和 1 (远端内网能访问),说明 iptables 规则已经正确添加。 所以剩下的问题似乎只有:本地端的 dns 。它不会随着远端服务器配置的“指定的域名走指定的 dns”发生变化,需要自行设置。 |
4
kyonn OP @ranaanna 已经解决, 用的 docker 镜像有问题, 没有正确计算 route 配置项的掩码, 变成了 32 位掩码了, 类似于于
route=192.168.30.0 255.255.255.255 修改后内网域名也能访问了, 不过奇怪的是不设置 split-dns 似乎也能正常工作? 请教下 ocserv 的 dns 解析逻辑是怎么样的? 什么情况下走客户端本地的 dns? 什么情况下走 vpn 流量去解析 dns. 1. 我看配置项中有 tunnel-all-dns , 那应该意味着也有 dns 分流的方案: 比如是 split-dns 指定的域名走 vpn 服务器, 其他走客户端本地网络? |
5
ranaanna 231 天前
@kyonn tunnel-all-dns, split-dns 都是允许全部(或特定)的 dns 请求通过隧道。如果希望 dns 分流,那么就不应该用 tunnel-all-dns 。另外,客户端的 dns 行为,到底是走隧道还是本地网络接口,还是要看操作系统和应用程序,并不是 tunnel-all-dns 就一定屏蔽本地 dns
|
6
ranaanna 231 天前
|
7
kyonn OP @ranaanna 服务端的 tunnel-all-dns, split-dns 只是 vpn 服务端允许全部或特定 dns 请求走隧道, 具体客户端要不要把这部分 dns 解析发到 隧道上来是由客户端(比如 andriod anyconnect app) 决定, 是这个意思吗?
我原本以为这部分算是中心配置, 服务端配置后, 客户端一连接上来, 这部分配置就会自动下发到 客户端. |