这或多或少是以下情况的复兴:将流量从一个以太网接口转发到另一个以太网接口
假设以下设置。
. 15.15.1.11 15.15.1.12
. A:eth0 --- eth0:B:xxx0 --- xxx0:C
. 15.15.0.10 15.15.0.11
其中 A、B 和 C 是独立的节点,xxx0 是某些非以太网网络接口。
每个节点分配以下地址和路由:
A
ip addr add 15.15.0.10 dev eth0
ip route add 15.15.0.0/16 dev eth0
B
ip addr add 15.15.0.11 dev eth0
ip route add 15.15.0.0/24 dev eth0
ip addr add 15.15.1.11 dev xxx0
ip route add 15.15.1.0/24 dev xxx0
C
ip addr add 15.15.1.12 dev xxx0
ip route add 15.15.1.0/16 dev xxx0
此时,我可以从 A 或 C 通过以下方式 ping B
ping 15.15.1.11
ping 15.15.0.11
从 B,我可以 ping 通 A 或 C。
ping 15.15.0.10
ping 15.15.1.12
但是,我无法从 A ping 通 C 或反之亦然。
我尝试了以下操作,但没有成功:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth0 -o xxx0 -j ACCEPT
iptables -A FORWARD -i xxx0 -o eth0 -j ACCEPT
答案1
问题在于您已告诉 C,A 位于直接连接的网络中。因此,当您尝试 ping A 时,C 会尝试使用 ARP 获取 A 的 MAC 地址,而 A 永远不会响应。A 也是如此。
我建议你改用以下配置:
A ip addr add 15.15.0.10/24 dev eth0 ip route add 15.15.1.0/24 via 15.15.0.11
B ip addr add 15.15.0.11/24 dev eth0 ip addr add 15.15.1.11/24 dev xxx0
C ip addr add 15.15.1.12/24 dev xxx0 ip route add 15.15.0.0/24 via 15.15.1.11
注意,所有直连路由都会自动添加。然后你只需要告诉 A 和 C 如何通过 B 到达对方的网络。