如何使用 Linux 机器作为路由器实现生产网络与隔离网络之间的通信?

如何使用 Linux 机器作为路由器实现生产网络与隔离网络之间的通信?

我正在创建一个测试环境。其中我有一个生产网络、隔离网络和 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 操作应该可以正常工作。反之亦然。

相关内容