我想知道如何将流量从网关转发到子网。
我有这个工作设置,隧道后面的主机 A 可以 ping 通主机 B 10.151.0.1,但不能 ping 通主机 C 10.151.0.2。
如果我在 HOST B 10.151.0.1(子网网关)上 TCPDUMP 数据包,我会看到接口上的 ping
tcpdump: listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
(host A)10.0.1.18 > (host c)10.151.0.2: ICMP echo request, id 21863, seq 7, length 64
因此数据包到达(主机 b)10.151.0.1,但没有转发到 10.151.0.2 主机 C。我看不到主机 C 接口上有任何内容。
我已经启用 IP 转发并添加以下 iptables 规则(主机 B):
iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
iptables -A FORWARD -i eno1 -o eno2 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eno2 -o eno1 -j ACCEPT
我还尝试将此路由添加到主机 C:
ip route add 10.151.0.0/30 via 10.151.0.2 dev eno2
也许有人可以帮助我?非常感谢
我尝试通过寻址整个子网来避免多个主机到主机 ipsec。顺便说一下,主机 B 10.151.0.1 可以 ping 10.151.0.2 ;-)
更新 1: 我现在可以使用代理 ARP 从主机 C ping 主机 A:
echo 1 > /proc/sys/net/ipv4/conf/eno2/proxy_arp
奇迹发生:
root@hostC:/home/administrateur# ping 10.0.1.21
PING 10.0.1.21 (10.0.1.21) 56(84) bytes of data.
64 bytes from 10.0.1.21: icmp_seq=1 ttl=62 time=16.0 ms
64 bytes from 10.0.1.21: icmp_seq=2 ttl=62 time=16.0 ms
但是我总是无法从主机 A ping 通主机 C,但主机 A 和 B 之间的 ping 通是可以的
更新2: 从主机 B 中删除此项,一切正常:
/sbin/route add -net 10.0.1.0 netmask 255.255.255.0 gw 10.151.0.1
/sbin/iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
所有主机均可 ping 所有主机,子网到子网均可正常工作:)
答案1
您在 HOST C 上的路由应如下所示:
ip route add HOST-A-IP-RANGE via 10.151.0.2 dev eno2
例如:
IP route add 10.0.1.0/24 via 10.151.0.2 dev eno2
实际上这可能是错误的,因为我没有您的 Host-A 网络地址。并且您还应该在 Host-A 上添加相同的路由。
ip route add HOST-B-IP-RANGE via 10.151.0.2 dev eno2
答案2
我在主机 C 上添加了一条路由:
10.0.1.0/24 via 10.151.0.2 dev eno2
如果我从主机 C ping 主机 A:
root@HostC:/home/administrateur# ping 10.0.1.21
PING 10.0.1.21 (10.0.1.21) 56(84) bytes of data.
From 10.151.0.2 icmp_seq=1 Destination Host Unreachable
From 10.151.0.2 icmp_seq=2 Destination Host Unreachable
From 10.151.0.2 icmp_seq=3 Destination Host Unreachable
From 10.151.0.2 icmp_seq=4 Destination Host Unreachable
这是来自主机 B 的 tcpdump:
root@hostB:/home/administrateur# tcpdump -pni eno2 -vvv
tcpdump: listening on eno2, link-type EN10MB (Ethernet), capture size 262144 bytes
14:04:30.980083 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.1.21 tell 10.151.0.2, length 46
14:04:32.004601 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.1.21 tell 10.151.0.2, length 46
14:04:33.028100 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.1.21 tell 10.151.0.2, length 46
14:04:34.052188 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.1.21 tell 10.151.0.2, length 46
主机 B 收到 ARP 请求,但是仅此而已,没有 ping 跟踪?
另一个练习从主机 A ping 主机 C:
administrateur@HostA:~$ ping 10.151.0.2
PING 10.151.0.2 (10.151.0.2) 56(84) bytes of data.
^C
--- 10.151.0.2 ping statistics ---
30 packets transmitted, 0 received, 100% packet loss, time 28999ms
TCPDUMP ENO1 主机 B:
root@hostB:/home/administrateur# tcpdump -pni eno1 -vvv | grep 10.151.0.2
tcpdump: listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
10.0.1.21 > 10.151.0.2: ICMP echo request, id 27436, seq 20, length 64
10.0.1.21 > 10.151.0.2: ICMP echo request, id 27436, seq 21, length 64
10.0.1.21 > 10.151.0.2: ICMP echo request, id 27436, seq 22, length 64
TCPDUMP eno2 HostB 为空:root@hostB:/home/administrateur# tcpdump -pni eno2 -vvv tcpdump:监听 eno2,链路类型 EN10MB(以太网),捕获大小 262144 字节
TCPDUMP eno2 HostC 为空。
主机 A 和 B 之间 ping 通:
administrateur@hostA:~$ ping 10.151.0.1
PING 10.151.0.1 (10.151.0.1) 56(84) bytes of data.
64 bytes from 10.151.0.1: icmp_seq=1 ttl=63 time=14.2 ms
64 bytes from 10.151.0.1: icmp_seq=2 ttl=63 time=14.1 ms
64 bytes from 10.151.0.1: icmp_seq=3 ttl=63 time=14.1 ms
看起来主机 B 没有转发到主机 C。