Linux上的两个networking之间的路由与不同的networking掩码和广播?

以太网

ServerA; IP=192.168.255.254; Mask=255.255.0.0; Bcast=192.168.255.255 | | eth1 IP=192.168.1.254; Mask=255.255.0.0; Bcast=192.168.255.255 ServerB DHCP: 192.168.1.1 - 192.168.1.252 eth0 IP=192.168.1.253; Mask 255.255.255.0; Bcast=192.168.1.255 | | Client1..252 IP over DHCP (192.168.1.1 - 192.168.1.252) 

如何连接/路由在ClientX和ServerA之间进行通信?

_

ClientX和ServerB之间的Ping工作。

ServerA和ServerB之间的Ping工作。

_

我尝试在Linux上的两个networking之间的路由? 在eth0和eth1之间路由,但没有奏效。

 auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.253 netmask 255.255.255.0 broadcast 192.168.1.255 auto eth1 iface eth1 inet static address 192.168.1.254 netmask 255.255.0.0 broadcast 192.168.255.255 

的/ etc /networking/接口

 interface=eth0 no-dhcp-interface=eth1 dhcp-range=interface:eth0,192.168.1.1,192.168.1.252,1 

/etc/dnsmasq.conf

———————————- UPDATE 1 ————– ———————-

 ServerA; IP=192.168.255.254; Mask=255.255.255.0; Bcast=192.168.255.255 | | eth1 IP=192.168.255.1; Mask=255.255.255.0; Bcast=192.168.255.255 ServerB DHCP: 192.168.1.1 - 192.168.1.253 eth0 IP=192.168.1.254; Mask 255.255.255.0; Bcast=192.168.1.255 | | Client1..253 IP over DHCP (192.168.1.1 - 192.168.1.253) 

路由:

  sysctl -w net.ipv4.ip_forward=1 iptables -A INPUT -i lo -j ACCEPT # Always accept loopback traffic iptables -A INPUT -i eth0 -j ACCEPT # We allow traffic from the LAN side iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow established connections iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Masquerade iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # fowarding iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT # Allow outgoing connections from the LAN side. 

结果:

Ping从ClientX到ServerA工作, 但不是从ServerA到ClientX:

  $ ping 192.168.1.119 PING 192.168.1.119 (192.168.1.119) 56(84) bytes of data. From 192.168.255.254 icmp_seq=1 Destination Host Unreachable From 192.168.255.254 icmp_seq=2 Destination Host Unreachable … 

———————————- UPDATE 2 without iptables(Solution)——— —————————

networking根据更新1:

  ServerA | |------------------|------------------|-------------… eth1 eth1 eth1 ServerB ServerC ServerD eth0 eth0 eth0 | | | | | … ClientX network ClientY network 

ServerA上的路由:

  route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.255.1 route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.255.2 … route add -net 192.168.N.0 netmask 255.255.255.0 gw 192.168.255.N 

在ServerB上阻止:

  sysctl -w net.ipv4.ip_forward=1 

所有networking参与者之间的Ping工作都没有使用iptables。

您的192.168.0.0/16 192.168.0.0 - 255.255 )包含192.168.1.0-255 )。 因此,您不能通过ServerB从ServerA到ClientX的路由。

让我们保持尽可能多的variables,只是修改必要的:

保持:

  • ClientXconfiguration。
  • ServerB的eth0是。
  • ServerA IP地址192.168.255.254Bcast=192.168.255.255

更改:

  • ServerAnetworking掩码到255.255.255.0
  • ServerB eth1

     auto eth1 iface eth1 inet static address 192.168.255.253 netmask 255.255.255.0 broadcast 192.168.255.255 

当然,你可以在ServerA和ServerB之间使用更宽的networking掩码,只要它不与192.168.1.0/24重叠; /17netmask 255.255.128.0192.168.128.0 - 192.168.255.255是可能的最宽范围。

这只是解决具体问题的一个快速解决scheme,请介绍一下CIDR 。


现在,基于评论。 假设你有很多服务器,并且想把每一台服务器作为一个路由器,从它自己的子网到192.168.255.0/24192.168.255.254 。 你可以在你的configuration中使用一个简单的模式, 192.168.255.254/24作为服务器之间的networking,另一个是客户端 – 服务器networking。

  eth0 eth1 ServerB 192.168.1.253 192.168.255.1 ServerC 192.168.2.253 192.168.255.2 ServerD 192.168.3.253 192.168.255.3 ... Server<N> 192.168.N.253 192.168.255.N 

假设eth0作为特定服务器后面的客户端的默认网关,每个客户端都可以通过中间服务器连接到ServerA。 但是,ServerA通过它自己的默认网关(我们不知道)具有默认路由0.0.0.0 。 这包括除自己的子网之外的所有内容。 您需要为其他服务器后面的每个子网添加一条路由,即

 route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.255.1 route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.255.2 route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.255.3 ... route add -net 192.168.N.0 netmask 255.255.255.0 gw 192.168.255.N 

您可以通过ServerA上的/etc/network/interfaces来使其持久化,例如

 auto eth0 iface eth0 inet static address 192.168.255.254 netmask 255.255.255.0 broadcast 192.168.255.255 up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.255.1 up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.255.2 up route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.255.3 down route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.255.1 down route del -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.255.2 down route del -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.255.3 

我不能评论Linux的安装程序(我不知道任何关于Linux),但如果我是你的身份证看看你使用的IP地址scheme。

ServerA位于192.168.0.0/16networking上,它试图访问IP地址为192.168.1.252/24的另一个子网上的client1。

问题在于,在确定Client1是否与其在同一个子网上时,ServerA将使用其子网掩码。 如果它认为Client1在同一个子网上,则ServerA将尝试直接与CLient1通信,而不会将stream量发送到路由器。

在问题中使用IP寻址scheme。 ServerA将看到它的networking为192.168.0.0/16,并使用自己的Subnetmask将认为Client1也在192.168.0.0/16networking上。

在Linux中执行所有需要做的事情来启用路由,然后尝试将客户端的networkingID更改为不同的networking地址:

172.16.0.0/16或10.0.0.0/8

或者任何启动192.168的东西

或者,您可以将serverA所在的networking的networkingID更改为192.168.0.0/24,

默认情况下,路由不会被激活。 要在linux上激活路由,您必须添加以下行:net.ipv4.ip_forward = 1

在这个文件中:/etc/sysctl.conf

如果你想testing你可以用这个命令激活路由:sysctl -w net.ipv4.ip_forward = 1

您不能从服务器到客户端,因为您只允许RELATED和ESTABLISHED连接以这种方式。

 iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 

当你用另一种方式进行攻击的时候,这是有效的,因为你有不同的规则:

 iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT