通过中间 Linux 在两个 Linux 系统之间进行 ping 操作失败

通过中间 Linux 在两个 Linux 系统之间进行 ping 操作失败

我有一个简单的网络,其中有三个运行 CentOS 2.6 的 Linux 系统。

       Linux 1
(eth1: 192.138.14.1/24)
          |
          |
(eth4: 192.138.14.4/24)
       Linux 2
(eth2: 192.138.4.3/24)
          |
          |
(eth3: 192.138.4.2/24)
       Linux 3

我无法从 Linux 1 ping Linux 3。但我能 ping 通的是从 Linux 1 到 Linux 2 (eth2) 以及从 Linux 3 到 Linux 2 (eth4)。这意味着从 Linux 1,我可以 ping 通 192.138.4.3,但不能 ping 通 192.138.4.2。

以下是 Linux1 中 route -n 命令的输出

Linux1# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.138.14.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.138.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.135.18.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 eth3
0.0.0.0         10.135.18.1     0.0.0.0         UG    0      0        0 eth0

在 Linux 2 中:

Linux2# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.138.15.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.138.14.0    192.138.14.4    255.255.255.0   UG    0      0        0 eth4
192.138.14.0    0.0.0.0         255.255.255.0   U     0      0        0 eth4
192.138.4.0     192.138.4.3     255.255.255.0   UG    0      0        0 eth2
192.138.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
10.135.18.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.138.16.0    0.0.0.0         255.255.255.0   U     0      0        0 eth3
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 eth2 
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 eth3
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 eth4
0.0.0.0         10.135.18.1     0.0.0.0         UG    0      0        0 eth0

在 Linux 3 中:

Linux3# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.138.14.0    0.0.0.0         255.255.255.0   U     0      0        0 eth3
192.138.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth3
10.135.18.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 eth3
0.0.0.0         10.135.18.1     0.0.0.0         UG    0      0        0 eth0

我已经在 Linux 2 中启用了 IP 转发

Linux2# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1

Linux2#: sysctl -p 
sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_sack = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

Linux 2中iptables -L的结果:

Linux2# iptables -L  
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere       

要从 Linux 1 ping Linux3,我是否应该在 iptables 中添加针对 icmp 的特定规则?如果不行,我遗漏了什么?

答案1

您的设置存在一些问题。

首先,您使用公共、可路由地址,就好像它们是私有地址一样。例如,192.138.14.1 是新泽西州的 Chapters Capital Management, LLC,而 192.138.4.1 是伦敦大学 (英国) 计算中心。等等。请重新使用 192.168.0.0/16 范围内的地址。

其次,您的路由表包含许多错误。您最好重新开始,完全删除当前路由表,然后通过当前实用程序按如下方式配置它们知识产权来自iprouter2 是包,而不是过时的实用程序,如路线

在Linux1上,让网络管理器或dhcp协商本地路由表,然后添加:

  ip route add default via 192.168.14.4

Linux3 上也一样,只是命令是:

  ip route add default via 192.168.4.3

Linux2 上也一样,除了:

  ip route add default via 10.135.18.1
  iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这样,Linux2 就充当了 Linux1 和 Linux3 的路由器/网关,它本身具有合适的面向 Internet 的网关,并且将来自 Linux1 和 Linux3 的 Internet 流量隐藏起来,就好像它是自己的一样(这是该iptables命令的含义)。

请注意,在上面我已经将 192.138.0.0/16 范围内的地址转换为 192.168.0.0/16 范围。

答案2

linux1 和 linux3 服务器均已在本地路由 192.138.4.0 和 192.168.14.0。因此不会将任何内容发送到 linux2 进行路由

Linux 1

Linux1# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.138.14.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1 
192.138.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

Linux3

Linux3# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.138.14.0    0.0.0.0         255.255.255.0   U     0      0        0 eth3
192.138.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth3

你能给出这些命令在 linux1 和 linux3 上的结果吗?

# ip -4 addr list
# ip route list

相关内容