Linux

在Linux上具有不同網路遮罩和廣播的兩個網路之間路由?

  • July 3, 2017

乙太網路:

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 上的兩個網路之間進行路由?在 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/網路/介面

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

/etc/dnsmasq.conf

———————————-更新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.

結果:

從 ClientX 到 ServerA 的 Ping 有效,但從 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
…

———————————-沒有iptables的UPDATE 2(解決方案)——— ————————–

根據更新 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

所有網路參與者之間的 ping 都在沒有 iptables 的情況下工作。

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

讓我們保留盡可能多的變數,只修改必要的:

保持:

  • ClientX 配置原樣。
  • ServerBeth0原樣。
  • 伺服器A IP 地址192.168.255.254Bcast=192.168.255.255.

改變:

  • 伺服器網路遮罩到255.255.255.0.
  • 伺服器B eth1
auto eth1
iface eth1 inet static
address 192.168.255.253
netmask 255.255.255.0
broadcast 192.168.255.255

當然,您可以在 ServerA 和 ServerB 之間使用更寬的網路遮罩,只要它不與192.168.1.0/24;重疊即可。/17ienetmask 255.255.128.0即是可能的192.168.128.0 - 192.168.255.255最廣泛的範圍。

這只是對確切問題的快速解決方案,請用CIDR介紹自己。


現在,根據評論。假設您有許多伺服器,並且希望將每台伺服器用作從其自己的子網到192.168.255.0/24ServerA的路由器192.168.255.254。你可以在你的配置中使用一個簡單的模式,其中一個192.168.255.254/24作為伺服器之間的網路,另一個是客戶端-伺服器網路。

          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。但是,ServerA0.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

/etc/network/interfaces您可以通過on ServerA使其持久化,例如

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

引用自:https://serverfault.com/questions/858533