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

请教一个 OpenVPN 组网的问题

  •  
  •   lyangjyehaur · 2023-03-23 17:59:36 +08:00 · 2903 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由于目前用的宽带无公网 IPv4 地址,但是又有在外访问内网设备的需求,就在一台云服务器上搭建了一个 OpenVPN 服务端。然后在 NAS 上安装了 OpenWrt 以及爱快的虚拟机作为客户端来连接 VPN 服务端。目的是想在其他内网设备不连接 VPN 的前提下,使用 OpenWrt 或者爱快的虚拟机作为跳板来访问内网的其他设备。我尝试了一些像是静态路由之类的配置项未果。我想请教一下各位 V 友在目前的软硬件下能否实现这个需求,如果可以,应该如何配置?如果无法实现,需要购买什么样的网络设备来实现此需求呢?

    大概的网络拓扑如下
    https://imgur.com/gHAJq7G
    12 条回复    2023-03-24 18:58:44 +08:00
    podel
        1
    podel  
       2023-03-23 18:26:44 +08:00
    两边都配置好 静态路由。
    数据是双向的。别光是配一边。
    比如说 你家是 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  
       2023-03-23 20:20:03 +08:00   ❤️ 1
    给你推荐 tailscale ,完美解决。
    jhytxy
        3
    jhytxy  
       2023-03-23 20:32:44 +08:00
    如果能接受控制器在外网的话

    zerotier 和 tailscale 是最好的
    fastcache
        4
    fastcache  
       2023-03-23 20:53:15 +08:00   ❤️ 1
    用 zerotier , 把有公网地址的云服务器设置为 moon 做中转即可
    wuruxu
        5
    wuruxu  
       2023-03-23 21:58:25 +08:00   ❤️ 1
    wireguard 可以考虑下
    有 IPV6 的,可以优先考虑,直接连接更快
    sylviaweissenba
        6
    sylviaweissenba  
       2023-03-24 01:53:23 +08:00   ❤️ 1
    zerotier
    maybeonly
        7
    maybeonly  
       2023-03-24 09:13:29 +08:00   ❤️ 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
       2023-03-24 18:46:22 +08:00 via iPhone
    @podel 的确之前没有在网关设备上配路由,不过看了一下我这款电信送的路由器配不了路由,得换個路由器了哈哈😆
    lyangjyehaur
        9
    lyangjyehaur  
    OP
       2023-03-24 18:47:26 +08:00 via iPhone
    @chengliangben 谢啦👏我去研究下
    lyangjyehaur
        10
    lyangjyehaur  
    OP
       2023-03-24 18:50:50 +08:00 via iPhone
    @jhytxy @fastcache @sylviaweissenba ZeroTier 有尝试过,好像是只能每台设备都要跑一个客户端的?🤔感觉不是太方便(当然有可能是我没研究透
    lyangjyehaur
        11
    lyangjyehaur  
    OP
       2023-03-24 18:52:04 +08:00 via iPhone
    @wuruxu 谢啦😉刚好有 IPv6 的,我也研究下
    lyangjyehaur
        12
    lyangjyehaur  
    OP
       2023-03-24 18:58:44 +08:00 via iPhone
    @maybeonly 哇!感谢大佬🙏对照下来应该是少一步在网关设备上写路由,但是电信送的路由器又配置不了路由,还以为在爱快和终端上写好路由就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:53 · PVG 05:53 · LAX 13:53 · JFK 16:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.