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

openvpn 跨网段组网问题

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

    a5d9d82c62ead86d3cb11fe16eddeb67.jpeg 目前想要实现 192.168.2.200 这台电脑能够访问 192.168.10.2 这台设备。 openvpn 服务器已经搭好,客户机也能正常连接,目前就是 192.168.2.200 无法访问 192.168.10.2 , 在服务器上也无法 ping 通 192.168.10.2 尝试增加路由表 route add -net 192.168.10.0 netmask 255.255.255.0 gw 10.8.0.2 也不起作用。 改用 pptp 倒是成功了,不过 1 小时不到就封了端口。 麻烦各位大佬指点一二,成功了请第一个提供正确指导的喝杯咖啡,略表心意。

    服务器配置如下: (尝试 push route ,不成功,openvpn 官网的教程也看了一些,不是特别理解) local server

    port 1194

    proto udp

    dev tun

    ca ca.crt

    cert server.crt

    key server.key

    dh dh.pem

    auth SHA256

    tls-crypt tc.key

    topology subnet

    server 10.8.0.0 255.255.255.0

    push "block-ipv6"

    push "ifconfig-ipv6 fddd:1194:1194:1194::2/64 fddd:1194:1194:1194::1"

    ifconfig-pool-persist ipp.txt

    push "dhcp-option DNS 8.8.8.8"

    push "dhcp-option DNS 8.8.4.4" push "block-outside-dns"

    #push "route 192.168.2.0 255.255.255.0"

    keepalive 10 120

    cipher AES-128-GCM

    user nobody

    group nogroup

    persist-key

    persist-tun

    verb 3

    crl-verify crl.pem

    explicit-exit-notify

    client-to-client

    #client-config-dir /etc/openvpn/ccd

    #route 192.168.2.0 255.255.255.0

    第 1 条附言  ·  356 天前

    26d7f5cc3e41f7fb87e60f6dabb8c6bf.jpeg

    第 2 条附言  ·  355 天前
    问题已经解决,基本就是帖子里的设置。
    也向大佬略表了心意。
    再次感谢提供帮助的朋友。
    32 条回复    2024-07-23 20:04:42 +08:00
    cdlnls
        1
    cdlnls  
       357 天前
    这个就是配置路由的问题,
    可以试试给 192.168.2.200 这个客户端推送一个路由
    push "route 192.168.10.0 255.255.255.0"

    然后给路由器配置:
    iroute 192.168.10.0 255.255.255.0
    ik
        2
    ik  
       357 天前 via iPhone
    需要打通内网一边的 openvpn 也需要开启转发和写路由
    findwho
        3
    findwho  
    OP
       357 天前
    @cdlnls 好的,我测试下。我之前尝试在 server.conf 下 push "route 192.168.10.0 255.255.255.0"push "route 192.168.2.0 255.255.255.0"
    然后似乎不行。


    @ik 应该不需要,之前用 pptp 试过。路由器这边可以不需要设置。只是 pptp 刚试好就被封了。
    ik
        4
    ik  
       357 天前 via iPhone
    @findwho #3 这个配置上之后,重新连接客户端,ping 192.168.2.200 能通吗?
    ik
        5
    ik  
       357 天前 via iPhone
    哦 看反了, 路由器应该已经有路由指向了
    findwho
        6
    findwho  
    OP
       357 天前
    @ik 我的 4G 路由器不在手边,需要明天再试了,不过我现在在服务器上 ping 192.168.2.200 是不通的
    blackeeper
        7
    blackeeper  
       357 天前   ❤️ 1
    1 ,服务器配置要增加这些:
    client-config-dir /etc/openvpn/ccd
    route 192.168.10.0 255.255.255.0
    push "route 192.168.10.0 255.255.255.0"
    2 ,然后增加一个文件:/etc/openvpn/ccd/<4G 路由器的 openvpn 证书名称>
    iroute 192.168.10.0 255.255.255.0
    cdlnls
        8
    cdlnls  
       357 天前
    @findwho
    这位老哥 @blackeeper 是正解
    findwho
        9
    findwho  
    OP
       357 天前
    @blackeeper
    我可以不可这么理解,假如
    服务器增加
    client-config-dir /etc/openvpn/ccd
    route 192.168.2.0 255.255.255.0
    push "route 192.168.2.0 255.255.255.0"

    然后增加一个文件:/etc/openvpn/ccd/<client2(192.168.2.200 的电脑)>
    iroute 192.168.10.0 255.255.255.0

    服务器就能够 ping 通 192.168.2.200 ?因为 4G 路由器这边没法测试,只能测 192.168.2.200 这边。
    blackeeper
        10
    blackeeper  
       357 天前
    不可以这么理解,我上面那个是暴露 192.168.10.0/24 的网络。
    以下是路由 192.168.2.0/24 的网络。
    正确的是:
    client-config-dir /etc/openvpn/ccd #这条是开启 client 配置项
    route 192.168.2.0 255.255.255.0 #这条是开启 openVPN 的允许的路由条目
    push "route 192.168.2.0 255.255.255.0" #这条是推送给 client1 的路由,告诉 client1 访问 client2 的网络要走 openVPN

    然后增加一个文件:/etc/openvpn/ccd/<client2(192.168.2.200 的电脑)>
    iroute 192.168.2.0 255.255.255.0 #这条表明 192.168.2.0 是 client2 的内部网络

    上面都是单向的网络,如果你想两个网段互通,网段内客户端无感知互相访问,把这两个配置加起来就可以了。
    由于 client2 不是网关就需要要在路由器加一条路由 192.168.10.0/24 下一跳:client2 ( 192.168.2.200 )
    findwho
        11
    findwho  
    OP
       357 天前
    @blackeeper 谢谢大佬
    ccd more client1 ( client1 就是 4G 路由器)
    iroute 192.168.10.0 255.255.255.0


    server.conf(也增加了这几行)
    client-config-dir /etc/openvpn/ccd
    route 192.168.10.0 255.255.255.0
    push "route 192.168.10.0 255.255.255.0"

    openvpn 的路由表也看到这一条
    192.168.10.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0

    但是目前 vps 和 192.168.2.200 上面都无法 ping 通 192.168.10.1 这个网段
    192.168.2.200 ( 10.8.0.3 )上面是可以正常 ping 通 10.8.0.2
    ochatokori
        12
    ochatokori  
       357 天前 via Android
    要在 192.168.10.1 和 192.168.2.200 上加路由表

    192.168.10.1
    route add -net 192.168.2.0/24 gw 10.8.0.3
    192.169.2.200
    route add -net 192.168.10.0/24 gw 10.8.0.2
    blackeeper
        13
    blackeeper  
       357 天前
    @findwho
    你的 openVPN 服务器开启了 ip 转发没有?命令如下:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    findwho
        14
    findwho  
    OP
       357 天前
    @ochatokori C:\Windows\System32>route add -p 192.168.10.0 mask 255.255.255.0 10.8.0.2
    操作完成!
    目前在服务器上都没法 ping 通 192.168.10.0 这个网段,应该不是这个问题吧。假如服务器能 ping 通,在 192.168.2.200 上 ping 不同,那就是客户端要增加路由表
    findwho
        15
    findwho  
    OP
       357 天前
    @blackeeper 这个肯定开了啊。之前用 pptp 协议的时候,是能用的啊。就是被封了。
    findwho
        16
    findwho  
    OP
       357 天前
    这个是路由表
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 XX.XX.XX.1 0.0.0.0 UG 0 0 0 eth0
    10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
    XX.XX.XX.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
    172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
    192.168.10.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
    blackeeper
        17
    blackeeper  
       357 天前
    @findwho openVPN 服务的路由表没问题,加了 openVPN 配置,你的 client1 ,client2 要重连一下 openVPN 。
    如果还不通的,可以贴一下 client1 ,client2 的路由表
    findwho
        18
    findwho  
    OP
       357 天前
    客户端已经重新连接过,按道理应该是服务器先能 ping 通吧。
    活动路由:(clinet2 目前地址 192.168.2.210 )
    网络目标 网络掩码 网关 接口 跃点数
    0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.210 281
    0.0.0.0 128.0.0.0 10.8.0.1 10.8.0.3 257
    10.8.0.0 255.255.255.0 在链路上 10.8.0.3 257
    10.8.0.3 255.255.255.255 在链路上 10.8.0.3 257
    10.8.0.255 255.255.255.255 在链路上 10.8.0.3 257
    XX.XX.XX.XX 255.255.255.255 192.168.2.1 192.168.2.210 281
    127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
    127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
    127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
    128.0.0.0 128.0.0.0 10.8.0.1 10.8.0.3 257
    169.254.0.0 255.255.0.0 在链路上 169.254.214.184 291
    169.254.214.184 255.255.255.255 在链路上 169.254.214.184 291
    169.254.255.255 255.255.255.255 在链路上 169.254.214.184 291
    192.168.2.0 255.255.255.0 在链路上 192.168.2.210 281
    192.168.2.210 255.255.255.255 在链路上 192.168.2.210 281
    192.168.2.255 255.255.255.255 在链路上 192.168.2.210 281
    192.168.10.0 255.255.255.0 在链路上 192.168.2.210 281
    192.168.10.0 255.255.255.0 10.8.0.2 10.8.0.3 2
    192.168.10.200 255.255.255.255 在链路上 192.168.2.210 281
    192.168.10.255 255.255.255.255 在链路上 192.168.2.210 281
    224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
    224.0.0.0 240.0.0.0 在链路上 169.254.214.184 291
    224.0.0.0 240.0.0.0 在链路上 10.8.0.3 257
    224.0.0.0 240.0.0.0 在链路上 192.168.2.210 281
    255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
    255.255.255.255 255.255.255.255 在链路上 169.254.214.184 291
    255.255.255.255 255.255.255.255 在链路上 10.8.0.3 257
    255.255.255.255 255.255.255.255 在链路上 192.168.2.210 281
    ===========================================================================
    永久路由:
    网络地址 网络掩码 网关地址 跃点数
    0.0.0.0 0.0.0.0 192.168.2.1 默认
    192.168.10.0 255.255.255.0 10.8.0.2 1
    findwho
        19
    findwho  
    OP
       357 天前
    那个 4g 路由器只要一推路由设置,我就没法进入后台,使用无线或者有线都不行,在联系客服帮我看一下。所以贴不了 client1 的路由。
    blackeeper
        20
    blackeeper  
       357 天前
    @findwho
    1 ,有几个比较怪的路由,不知道是你手动添加的,还是啥,要删除
    0.0.0.0 128.0.0.0 10.8.0.1 10.8.0.3 257 #这个很怪,要删除
    192.168.10.0 255.255.255.0 在链路上 192.168.2.210 281 #这个路由就 client1 的路由给抢走了,要删除
    192.168.10.0 255.255.255.0 10.8.0.2 10.8.0.3 2 #这个是 client1 没问题
    192.168.10.200 255.255.255.255 在链路上 192.168.2.210 281 #这个路由就 client1 的路由给抢走了,要删除
    192.168.10.255 255.255.255.255 在链路上 192.168.2.210 281 #这个路由就 client1 的路由给抢走了,要删除
    2 ,永久路由: 这个要删掉,上面已经有了,不需要重复添加。
    192.168.10.0 255.255.255.0 10.8.0.2 1


    删除命令:
    route DELETE 0.0.0.0 MASK 128.0.0.0 10.8.0.1
    route DELETE 192.168.10.0 MASK 255.255.255.0 192.168.2.210
    route DELETE 192.168.10.200 MASK 255.255.255.0 192.168.2.210
    route DELETE 192.168.10.255 MASK 255.255.255.0 192.168.2.210
    route -p DELETE 192.168.10.0 MASK 255.255.255.0 192.168.2.210
    ochatokori
        21
    ochatokori  
       357 天前 via Android
    @findwho 服务器想要 ping 通 192.168.10.0 段就要在服务器上添加到 192.168.10.0 段的路由,网关为 10.8.0.2

    思路就是 openvpn 客户端想要 ping 通另外的客户端的段,就要在自身添加到目标段网关为另外客户端的 openvpn 地址,openvpn 客户端下面的设备不用管
    findwho
        22
    findwho  
    OP
       357 天前
    @blackeeper
    我的系统是 win11,这些奇怪路由不是我加的。我加的都是经过 10.8.0.0 这个网关的。
    0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.210 281
    10.8.0.0 255.255.255.0 在链路上 10.8.0.3 257
    10.8.0.3 255.255.255.255 在链路上 10.8.0.3 257
    10.8.0.255 255.255.255.255 在链路上 10.8.0.3 257
    XX.XX.XX.XX 255.255.255.255 192.168.2.1 192.168.2.210 281
    127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
    127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
    127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
    128.0.0.0 128.0.0.0 10.8.0.1 10.8.0.3 257
    169.254.0.0 255.255.0.0 在链路上 169.254.214.184 291
    169.254.214.184 255.255.255.255 在链路上 169.254.214.184 291
    169.254.255.255 255.255.255.255 在链路上 169.254.214.184 291
    192.168.2.0 255.255.255.0 在链路上 192.168.2.210 281
    192.168.2.210 255.255.255.255 在链路上 192.168.2.210 281
    192.168.2.255 255.255.255.255 在链路上 192.168.2.210 281
    192.168.10.0 255.255.255.0 10.8.0.2 10.8.0.3 2
    224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
    224.0.0.0 240.0.0.0 在链路上 169.254.214.184 291
    224.0.0.0 240.0.0.0 在链路上 10.8.0.3 257
    224.0.0.0 240.0.0.0 在链路上 192.168.2.210 281
    255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
    255.255.255.255 255.255.255.255 在链路上 169.254.214.184 291
    255.255.255.255 255.255.255.255 在链路上 10.8.0.3 257
    255.255.255.255 255.255.255.255 在链路上 192.168.2.210 281
    ===========================================================================
    永久路由:
    网络地址 网络掩码 网关地址 跃点数
    0.0.0.0 0.0.0.0 192.168.2.1 默认
    192.168.10.0 255.255.255.0 10.8.0.2 1
    ========================================================================这个是最新的路由。有 2 个 192.168.10.0 是因为
    执行 route add -p 192.168.10.0 mask 255.255.255.0 10.8.0.2 后会出现两个。
    findwho
        23
    findwho  
    OP
       357 天前
    @ochatokori 192.168.10.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0 服务器有这条路由,是你说的意思嘛?
    我尝试把 tun0 换为 eth0 不成功。
    findwho
        24
    findwho  
    OP
       356 天前
    @blackeeper 大佬,我想了解一下,是不是按道理先要在服务器上 ping 通 192.168.10.0 这个网段。现在服务器都 ping 不通,是不是可能路由器那边的问题??
    blackeeper
        25
    blackeeper  
       356 天前
    @findwho 是的,有可能是路由器那个禁止了 ping ,你可以在 openVPN 服务器上 ping 192.168.10.2
    findwho
        26
    findwho  
    OP
       356 天前
    @blackeeper 服务器 ping 不通的。路由器应该没有禁用,昨天我用 pptp vpn 测试是成功的。从 192.168.2.200 这个电脑可以正常访问 192.168.10.2,能 ping 通,能访问。只是 pptp 昨天被封端口了。
    我感觉路由器是有点问题,因为连接 vpn 后,不推路由还好,一推就 wlan ,lan 都没法访问 192.168.10.1.也 ping 不同。

    之前这个设置也是
    push "redirect-gateway def1 ipv6 bypass-dhcp"
    服务器只要用这个设置,连接路由器就没法上网。所以服务器把这个禁掉了。
    findwho
        27
    findwho  
    OP
       356 天前
    我还怀疑过路由器这部分设置有问题。不过昨天都正常的。
    ![26d7f5cc3e41f7fb87e60f6dabb8c6bf.jpeg]( https://i.mji.rip/2023/11/23/26d7f5cc3e41f7fb87e60f6dabb8c6bf.jpeg)
    里面的端口 tuno,tun1 不知道啥意思,( tun0 有点像 openvpn 生成的端口)
    cdlnls
        28
    cdlnls  
       356 天前
    假如现在 server 的配置文件里面有:route 192.168.10.0 255.255.255.0 和 route 192.168.2.0 255.255.255.0
    在没有其他的情况下,这两个配置会在 openvpn 服务器上添加两个路由指向 openvpn 的虚拟网关(不会有任何作用,因为 openvpn 不知道下一跳在哪里)

    只有当你给 192.168.2.200 这个客户端推送了 iroute 192.168.10.0 255.255.255.0 之后,这里相当于告诉 openvpn 服务器,这个客户端拥有这个网段 192.168.10.0 ,所以只有有了这个配置之后,openvpn 服务端才会把到达网关的数据包发送给这个客户端。

    所以,如果你要达到你的目的,路由器上必须要有 iroute 这个配置,也就是:iroute 192.168.10.0 255.255.255.0 ,它会告诉 openvpn 服务器,它这里有 192.168.10.0 这个网段。

    你可以这样 debug 。

    1. 首先,在 openvpn 服务器上 ping 一下 10.8.0.2 ,这个肯定是能通的。
    2. 再在 openvpn 服务器上 ping192.168.10.1 ,这个如果不通,在 openvpn 服务器上抓包,只抓接口 tun0 的包,看包是不是去了 10.8.0.2 这个地址。如果没有包就加 route ,如果包下一跳没有到 10.8.0.2 ,那就路由器上加 iroute 。
    3. 如果上一步,你看到包到了路由器,但是没有回包,你就登录路由器,用 tcpdump 抓包,看路由器有没有收到你的包,还是和上面一样。
    4. 再在路由器上 ping 192.168.10.2 ,继续抓包,继续看数据包,如果到了路由器中断了,那就检查防火墙配置(我看了你贴的路由器配置,都是接受,按理说没问题)。
    5. 如果最终,你在 192.168.10.2 这个机器上抓到了包,就往原路上跟着一步一步查,就能知道问题在哪里了。

    ---
    其实我的网络和你差不太多,方案也是一样的,这样配置按理说其实没什么问题的。
    findwho
        29
    findwho  
    OP
       356 天前
    @cdlnls 我不太会抓包,下午是厂家的远程给我弄,额,还是 ping 不同。他也抓包看了,说 ping 192.168.10.1 的时候,服务器没有包出来。
    ping -> tun0 ->openvpn server -> eth0 ----------- 路由器 eth1--openvpnclient-->tun0
    说 tun0 是有数据的,没有具体说哪里没了。路由器抓包是没看到包的。(但是昨天我用 pptp 没问题的啊)
    服务器的路由,iptables 他都检查了。。。路由器也看了,还没找到原因。(看日志说我另外一台客户端用的证书一样,让我停掉再 ping ,还是一样。。。)
    @blackeeper 给下联系方式,给大佬点杯咖啡。辛苦大佬了。
    明天可能还要继续。
    blackeeper
        30
    blackeeper  
       356 天前
    @findwho 微信即 ID ,你这个还没搞定么,可以远程的话,我远程给你弄
    Timk
        31
    Timk  
       155 天前
    不好意思这么长时间还挖坟 请问楼主最后是怎么解决的
    我这也出现相同的问题了 有数据包到达服务器的 tun0 接口 但是 tun0 接口不回复报文 必须要是 VPN 的地址才可以
    findwho
        32
    findwho  
    OP
       113 天前
    @Timk 我后面主要是路由问题,配置好就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4353 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 04:08 · PVG 12:08 · LAX 20:08 · JFK 23:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.