我有一个简单的网络,其中有三个运行 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