lyangjyehaur

请教一个 OpenVPN 组网的问题

  •  
  •   lyangjyehaur · Mar 23, 2023 · 4146 views
    This topic created in 1211 days ago, the information mentioned may be changed or developed.
    由于目前用的宽带无公网 IPv4 地址,但是又有在外访问内网设备的需求,就在一台云服务器上搭建了一个 OpenVPN 服务端。然后在 NAS 上安装了 OpenWrt 以及爱快的虚拟机作为客户端来连接 VPN 服务端。目的是想在其他内网设备不连接 VPN 的前提下,使用 OpenWrt 或者爱快的虚拟机作为跳板来访问内网的其他设备。我尝试了一些像是静态路由之类的配置项未果。我想请教一下各位 V 友在目前的软硬件下能否实现这个需求,如果可以,应该如何配置?如果无法实现,需要购买什么样的网络设备来实现此需求呢?

    大概的网络拓扑如下
    https://imgur.com/gHAJq7G
    12 replies    2023-03-24 18:58:44 +08:00
    podel
        1
    podel  
       Mar 23, 2023
    两边都配置好 静态路由。
    数据是双向的。别光是配一边。
    比如说 你家是 192.168.2.0/24 服务器是 10.1.1.0/24
    你需要在你家的网关设备上 配置 10.1.1.0/24 的静态路由到 Openvpn 的机器。
    然后你的 Openvpn 服务器上面需要静态路由 192.168.2.0/24 到 Openvpn 的机器跟上同样的那个地址。
    JoshuaBen
        2
    JoshuaBen  
       Mar 23, 2023   ❤️ 1
    给你推荐 tailscale ,完美解决。
    jhytxy
        3
    jhytxy  
       Mar 23, 2023
    如果能接受控制器在外网的话

    zerotier 和 tailscale 是最好的
    teky
        4
    teky  
       Mar 23, 2023   ❤️ 1
    用 zerotier , 把有公网地址的云服务器设置为 moon 做中转即可
    wuruxu
        5
    wuruxu  
       Mar 23, 2023   ❤️ 1
    wireguard 可以考虑下
    有 IPV6 的,可以优先考虑,直接连接更快
    sylviaweissenba
        6
    sylviaweissenba  
       Mar 24, 2023   ❤️ 1
    zerotier
    maybeonly
        7
    maybeonly  
       Mar 24, 2023   ❤️ 1
    可以当然是可以的,相当于 site2site vpn 了。
    ref: https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/

    但是根据 ov 模式的不同,有不同的具体步骤。看起来是 tap 模式了。tap 模式做这种事情简单地多(相对 tun 而言)
    1.
    a.如果你的 ov 是 tun 模式
    在 ov 服务器上编辑 ccd 配置(假设你用了 net30 )
    ifconfig-push 10.8.0.10 255.255.255.252
    iroute 192.168.2.0 255.255.255.0
    这个 ccd 文件的文件名是你的 openvpn 用户名,位置由 server.conf 里的 client-config-dir 决定。
    b. 如果你的 ov 是 tap 模式,跳过这一步。

    2. 在 ov 服务器到公网上添加 nat 规则:
    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
    以及任何你喜欢的 dnat 规则。但是 dnat 的时候有个问题,就是你内网的回包没法回到 openvpn 服务端上去……
    解决这个问题的思路有两个:
    i. 完成 dnat 之后立刻做一次 snat
    iptables -t nat -A PREROUTING -d ${公网 ip} -p tcp --dport 12345 -j DNAT --to 192.168.2.x:12345
    iptables -t nat -A POSTROUTING -o tun0 ! -s 10.8.0.0/24 -j SNAT --to 10.8.0.1
    缺点是看不到真实的公网 ip 。
    ii. 在 192.168.2.1 和 192.168.2.2 上做连接追踪,比这些还复杂,暂不推荐。

    3. 在云端网关上(看起来是你那个云服务器,但真的是吗?)上添加路由,将 192.168.2/24 网段丢给 openvpn 的服务端
    如果做不到,可以考虑通过 nat+端口映射的方式访问,类似从公网访问。
    又或者在网络允许的情况下,在你云端所有的服务器上添加路由。
    ip r a 192.168.2.0/24 via 10.8.0.1

    a. 如果是 tun 模式
    要丢给接口(通常是 tun0 )
    ip r a 192.168.2.0/24 dev tun0
    b. 如果是 tap 模式
    ip r a 192.168.2.0/24 via 10.8.0.1

    4. 在家里的网关上(看起来是 192.168.2.1 )添加到云端的路由
    ip r a 10.8.0.0/24 via 192.168.2.2

    5. 在家里 ov 客户端上添加到云端的路由
    讲真这里由服务端下发路由是比较合适的……
    a.如果是 tun 模式
    ip r a 10.8.0.0/24 dev tun0
    b. 如果是 tap 模式
    通常可以跳过这一步,如果配置正确,你的 tap0 或类似接口上已经有相关路由。

    6. 各处防火墙放行
    无非是类似下面的东西
    iptables -I FORWARD -s 192.168.2.0/24 -d 10.8.0.0/24 -j ACCEPT
    iptables -I FORWARD -d 192.168.2.0/24 -s 10.8.0.0/24 -j ACCEPT
    之类的,各处执行……
    lyangjyehaur
        8
    lyangjyehaur  
    OP
       Mar 24, 2023 via iPhone
    @podel 的确之前没有在网关设备上配路由,不过看了一下我这款电信送的路由器配不了路由,得换個路由器了哈哈😆
    lyangjyehaur
        9
    lyangjyehaur  
    OP
       Mar 24, 2023 via iPhone
    @chengliangben 谢啦👏我去研究下
    lyangjyehaur
        10
    lyangjyehaur  
    OP
       Mar 24, 2023 via iPhone
    @jhytxy @fastcache @sylviaweissenba ZeroTier 有尝试过,好像是只能每台设备都要跑一个客户端的?🤔感觉不是太方便(当然有可能是我没研究透
    lyangjyehaur
        11
    lyangjyehaur  
    OP
       Mar 24, 2023 via iPhone
    @wuruxu 谢啦😉刚好有 IPv6 的,我也研究下
    lyangjyehaur
        12
    lyangjyehaur  
    OP
       Mar 24, 2023 via iPhone
    @maybeonly 哇!感谢大佬🙏对照下来应该是少一步在网关设备上写路由,但是电信送的路由器又配置不了路由,还以为在爱快和终端上写好路由就可以了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5209 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 09:23 · PVG 17:23 · LAX 02:23 · JFK 05:23
    ♥ Do have faith in what you're doing.