V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kyonn
V2EX  ›  宽带症候群

请教 ocserv 的分组隧道配置问题.

  •  
  •   kyonn · 233 天前 · 1123 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 MorganOnBass/docker-openconnect-ldap: Docker OpenConnect VPN Server 这个 docker 部署了 ocserv 镜像, 测试功能是正常的, 但是一旦开启分组隧道就会有问题. 个人需求是只有 vpn 服务器所在的局域网网段才走 vpn 代理流量, 其余全部走客户端本地的网咯. 其中 vpn 服务器所在的局域网网段不仅指 vpn 创建的虚拟网段, 更重要的是 ocserv 部署前就存在的私网网段.

    1. vpn 服务器所在的局域网网段是 192.168.30.x, 所以配置了 ocserv 的 route=192.168.30.0/24, 内网 dns 为 192.168.30.1. 但是一旦开启这个参数, 就无法通过内网域名访问内网服务了, 只有 192.168.30.x 的内网 ip 访问可行.

    2. 测试过连上 vpn 前后的客户端在百度显示的公网 ip 变化, 增加 route 字段配置前后, 公网 ip 确实从 vpn 服务器所在公网 ip 变成了 客户端自己所在网络的公网 ip, 证明分组确实生效了.

    3. 尝试过将内网域名写入 split-dns 字段, 并指定 dns 字段配置为 192.168.30.1(内网域名在这里可以解析), 但还是不行. 个人对 split-dns 功能的理解: split-dns 指定的域名会走 ocserv 配置的 dns 的地址(dns=xxxx)去解析域名? 不知道这么理解是否正确?

    4. 看到过不用 docker 的 ocserv 教程, 似乎还要增加一些 iptables 规则, 不知道跟这个是否有关系?

    第 1 条附言  ·  232 天前
    已解决, 用的 docker 配置里计算的 route 配置的掩码不对, 修改后重新构建 docker 镜像就行.
    10 条回复    2024-04-05 13:50:13 +08:00
    cndns
        1
    cndns  
       232 天前 via Android
    分流吗
    kyonn
        2
    kyonn  
    OP
       232 天前
    @cndns 是的, 只想让访问 vpn 服务器所在局域网网段和内网域名的流量走 vpn, 其他都走客户端的本地网络.
    ranaanna
        3
    ranaanna  
       232 天前
    1. 123 特别是 3 ,理解全部正确。
    2. 4 ,既然 2 和 1 (远端内网能访问),说明 iptables 规则已经正确添加。

    所以剩下的问题似乎只有:本地端的 dns 。它不会随着远端服务器配置的“指定的域名走指定的 dns”发生变化,需要自行设置。
    kyonn
        4
    kyonn  
    OP
       232 天前
    @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 服务器, 其他走客户端本地网络?
    ranaanna
        5
    ranaanna  
       232 天前
    @kyonn tunnel-all-dns, split-dns 都是允许全部(或特定)的 dns 请求通过隧道。如果希望 dns 分流,那么就不应该用 tunnel-all-dns 。另外,客户端的 dns 行为,到底是走隧道还是本地网络接口,还是要看操作系统和应用程序,并不是 tunnel-all-dns 就一定屏蔽本地 dns
    ranaanna
        6
    ranaanna  
       232 天前
    @kyonn @ranaanna 抱歉前面第一句话可能没有说清楚,本来应该是“tunnel-all-dns, split-dns 分别是允许全部的和特定的 dns 请求通过隧道”。
    kyonn
        7
    kyonn  
    OP
       232 天前
    @ranaanna 服务端的 tunnel-all-dns, split-dns 只是 vpn 服务端允许全部或特定 dns 请求走隧道, 具体客户端要不要把这部分 dns 解析发到 隧道上来是由客户端(比如 andriod anyconnect app) 决定, 是这个意思吗?

    我原本以为这部分算是中心配置, 服务端配置后, 客户端一连接上来, 这部分配置就会自动下发到 客户端.
    ranaanna
        8
    ranaanna  
       232 天前
    @kyonn 理论上当然是 OP 以为的这样,实际上基本上也是这样。但是 split-dns 不是强制 dns 请求不到达其他接口(只是允许或拒绝其到达 vpn 接口),所以像 nslookup, dig 之类的,还是能够返回本地 dns 的结果的
    ranaanna
        9
    ranaanna  
       232 天前
    @kyonn 或者说 anyconnect 客户端会帮助我们设置系统的 dns ,但是系统不一定接受客户端的设置,应用程序也不一定用系统的 dns 设置
    kyonn
        10
    kyonn  
    OP
       232 天前
    @ranaanna 了解,thanks
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:25 · PVG 09:25 · LAX 17:25 · JFK 20:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.