以太网:
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,只是修改必要的:
保持:
eth0是。 192.168.255.254和Bcast=192.168.255.255 。 更改:
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重叠; /17即netmask 255.255.128.0即192.168.128.0 - 192.168.255.255是可能的最宽范围。
这只是解决具体问题的一个快速解决scheme,请介绍一下CIDR 。
现在,基于评论。 假设你有很多服务器,并且想把每一台服务器作为一个路由器,从它自己的子网到192.168.255.0/24是192.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