我有 3 个主机:AAA、BBB、CCC。
- 主持人AAA是一个OpenVPN 服务r 与 IP172.17.10.1和掩码 255.255.255.0。
- 主持人血脑屏障有 2 个 tun 接口: •OpenVPN 服务器带有 IP172.16.10.1掩码 255.255.255.0 • 一个OpenVPN 客户端带有 IP172.17.10.50(连接到 OpenVPN 服务器 AAA)
- 主持人CCC是具有 IP 的 OpenVPN 客户端172.16.10.50(连接到 OpenVPN 服务器 BBB)。它通过 172.16.10.1 路由到 172.17.10.0/24。
我的目标是主机 CCC 成功 ping 主机 AAA 并且主机 AAA 看到来自主机 CCC 的原始 IP(172.16.10.50)的流量。
iptables -A FORWARD... -J ACCEPT
我已经在主机 BBB 上进行了设置。
在主机 BBB 上我已设置路由后规则。例如,使用 MASQUERADE 可以 ping 成功,但问题是主机 AAA 看到源 IP 172.17.10.50(主机 BBB 的 IP):
iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE
我将 MASQUERADE 改为 SNAT,但 ping 不通:
iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50
问题是,使用 tcpdump 我发现流量没有离开主机 BBB,并且没有到主机 AAA 的流量:
root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64
我尝试将 SNAT 更改为源 IP 172.17.10.55(来自 172.17.10.0/24 网络的 IP 地址),但 ping 再次失败,并且流量再次没有离开主机 BBB:
iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55
12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64
为什么我不能使用 --to-source 172.16.10.50 或 --to-source 172.17.10.55 进行 SNAT(该 IP 地址来自同一个 172.17.10.0/24 网络)从主机 CCC ping 172.17.10.1?
流量似乎停留在主机 BBB 上,并没有从其 tun17 退出。我看到流量从主机 CCC 流向主机 BBB,流量从 tun16 转发到 tun17,但随后无法通过 SNAT 将其发送到主机 AAA。
只有当数据包的源 IP 地址为 172.17.10.50 时,ping 才有效。如果我将源 IP 更改为 172.17.10.55,则 ping 失败。
我认为问题不是防火墙,也不是路由,我怀疑是 OpenVPN 限制,但我不确定。两个 OpenVPN 服务器处于--topology subnet
/24 网络掩码模式。
答案1
你必须添加伊洛特在 ccd 中操作内部 openvpn 路由表。
否则 openvpn 不知道将数据包路由回哪里。在 openvpn 日志中,您必须看到类似“MULTI:客户端 [IP 地址] 的源地址错误,数据包丢失”这样的行
更多详情请阅读: