无法 ping 通 OpenVPN 服务器后面的子网

无法 ping 通 OpenVPN 服务器后面的子网

这是我的基础设施:

dns of mydomain.com:
  vpn A 90.90.90.1
  vpn A 90.90.90.2

client vpn config:
  client
  dev tun
  proto udp
  nobind
  remote vpn.mydomain.com 1394

server1
  net.ipv4.ip_forward = 1
  iptables:
    FORWARD defaults to ACCEPT
  vpn config:
    dev tun
    topology subnet
    port 1394
    proto udp
    server 10.10.1.0 255.255.255.0
    push "route 10.90.90.0 255.255.255.0"
  interfaces:
    ifpub: 90.90.90.1/24
    ifpriv: 10.90.90.1/24
    ifvpn: 10.10.1.1/24
  routes:
    10.10.1.0/24 src 10.10.1.1 dev ifvpn
    10.10.2.0/24 via 10.90.90.2 dev ifpriv

server2
  net.ipv4.ip_forward = 1
  iptables:
    FORWARD defaults to ACCEPT
  vpn config:
    dev tun
    topology subnet
    port 1394
    proto udp
    server 10.10.2.0 255.255.255.0
    push "route 10.90.90.0 255.255.255.0"
  interfaces:
    ifpub: 90.90.90.2/24
    ifpriv: 10.90.90.2/24
    ifvpn: 10.10.2.1/24
  routes:
    10.10.1.0/24 via 10.90.90.1 dev ifpriv
    10.10.2.0/24 src 10.10.2.1 dev ifvpn

问题是,从我的客户端我可以 ping 通我所连接的 OpenVPN 服务器,但不能 ping 通 10.90.90.0/24 子网中的其他服务器。

tcpdump显示 ICMP 请求从同一台服务器发送到,ifvpnifprivICMP 请求数据包再也没有进一步传输。

向 iptables 添加日志记录还向我显示 ICMP 请求数据包进入 POSTROUTING 状态而未被丢弃,但数据包从未到达其目的地,我不知道这里发生了什么,我没有解决方案。

我知道我可以伪装我的数据包,但我不想这样做,因为这是不可推荐的(https://community.openvpn.net/openvpn/wiki/NatHack),否则这将是我最后的解决方案。

答案1

如果远程服务器“公开子网”,则必须有一个包含带指令ccd的文件的目录iroute,如 OpenVPN 文档中详细描述的那样。您还必须将route指令推送到客户端。

当一切正常时:

  • 客户端发送 ping。
  • 客户端的操作系统有一个路由命令,可以将此流量发送到本地 OpenVPN 服务器。
  • 信息ccd告诉 OpenVPN连接到远程发送流量以进行投递。
  • 交通从此处远程出现并继续前往目的地。
  • 对于回程,远程系统必须有一个操作系统路由,将流量发送回它是OpenVPN 服务器。

相关内容