![如何使用 Linux 机器作为路由器实现生产网络与隔离网络之间的通信?](https://linux22.com/image/692042/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Linux%20%E6%9C%BA%E5%99%A8%E4%BD%9C%E4%B8%BA%E8%B7%AF%E7%94%B1%E5%99%A8%E5%AE%9E%E7%8E%B0%E7%94%9F%E4%BA%A7%E7%BD%91%E7%BB%9C%E4%B8%8E%E9%9A%94%E7%A6%BB%E7%BD%91%E7%BB%9C%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
我正在创建一个测试环境。其中我有一个生产网络、隔离网络和 Linux 机器。在具有 2 个 NIC 的 Linux 机器中,一个 NIC 连接到生产网络环境然后分配一个 IP,另一个是隔离网络。
PROD-------(eth0)[LINUXMACHINE](eth1)-----ISOALTED NETWORK
在上面的表示中,配置一个 NIC(eth0) 后,我可以从生产网络机器 ping 到 Linux 机器。然后将 eth1 配置为隔离网络的默认网关。启用 eth1 后,可以从 Linux 机器 ping 到隔离环境。现在我无法从生产环境 ping 到 Linux 机器。如果我禁用 eth1,则意味着它将起作用,否则它将不起作用。
我是网络新手。我不知道问题到底出在哪里,也不知道我做错了什么。我已启用以下功能
IP 转发、MASQUERADE 和一些 iptables 规则
任何人都可以建议我一个好的方法来使这个工作完成。
提前致谢
編輯
是否配置
eth0 Link encap:Ethernet HWaddr 00:50:56:8f:68:e7
inet addr:192.168.108.13 Bcast:192.168.108.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe8f:68e7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:335609 errors:0 dropped:3107 overruns:0 frame:0
TX packets:48332 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:131610506 (131.6 MB) TX bytes:4424737 (4.4 MB)
eth1 Link encap:Ethernet HWaddr 00:50:56:8f:0a:c6
inet addr:192.168.103.1 Bcast:192.168.103.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe8f:ac6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18773 errors:0 dropped:0 overruns:0 frame:0
TX packets:35645 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1816084 (1.8 MB) TX bytes:50940327 (50.9 MB)
iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 3 packets, 375 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
31 2604 DNAT all -- * * 0.0.0.0/0 192.168.103.246 to:192.168.103.246
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1985 138K MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Chain VL (0 references)
pkts bytes target prot opt in out source destination
iptables -nvL
Chain INPUT (policy ACCEPT 49159 packets, 38M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 32 packets, 3393 bytes)
pkts bytes target prot opt in out source destination
13459 582K ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
21264 38M ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
19109 1919K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
cat /proc/sys/net/ipv4/ip_forward 1
答案1
您在两个网络上使用同一个子网,本质上就像是同一个网络。首先更改这一点,例如使用 192.168.109.0/255.255.255 作为测试实验室的子网,然后重试。
好的,现在您已分成两个子网,我注意到的另一件事是,您有一些防火墙规则和一些 NAT 规则,至少对我来说这些规则没有意义。尝试刷新您的 iptables 规则:
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -F
iptables -X
iptables -Z
然后仅读取NAT:
iptables -t nat -A POSTROUTING -o eth0 -J MASQUERADE
然后尝试从私有局域网中的一台生产机器 ping 一下,应该可以正常工作。
答案2
由于两个接口位于同一子网,因此只需使用以下命令即可桥接它们
brctl addbr bridge1
brctl addif bridge1 eth0
brctl addif bridge1 eth1
这应该可行
答案3
据我了解,您有以下情况
subnet1 ---> eth0 -Linux PC- eth1 <----subnet 2
您想尝试将中间的这台 Linux PC 用作两个子网之间的路由器吗?
在这种情况下,请做两件事:
1)禁用 iptables(仅用于测试。您可以稍后启用它们并定义规则)
2)在 Linux PC 上启用 ip 转发。将其添加到您的 /etc/sysctl.conf
ipv4.ip_forward = 1
然后运行
sysctl -p
现在,在子网 1 中需要访问子网 2 的主机上,您需要设置静态路由。
我们假设以下子网(根据您的问题)
子网 1 192.168.108.0/24 eth0 .13
子网 2 192.168.103.0/24 eth1.1
在这种情况下,您需要在子网 1 中的主机上运行此命令
route add -net 192.168.103.0/24 gw 192.168.108.13
在子网 2 中的主机上,你需要运行此命令
route add -net 192.168.108.0/24 gw 192.168.103.1
此后,从子网 1 中的主机向子网 2 中的主机发起的 ping 操作应该可以正常工作。反之亦然。