Назад | Перейти на главную страницу

Маршрутизация между двумя сетями на Linux с разной сетевой маской и широковещательной передачей?

Сеть Ethernet:

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 работает.

Пинг между ServerA и ServerB работает.

_

Я попытался Маршрутизация между двумя сетями в 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

/ и т.д. / сеть / интерфейсы

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 работает, но не с 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
 …

---------------------------------- ОБНОВЛЕНИЕ 2 без iptables (Решение) --------- ---------------------------

Сеть согласно ОБНОВЛЕНИЮ 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

Пинги между всеми участниками сети работают без iptables.

Я не могу комментировать настройку Linux (я ничего не знаю о Linux), но на вашем месте я бы взглянул на схему IP-адресации, которую вы использовали.

ServerA находится в сети 192.168.0.0/16, он пытается получить доступ к client1 в другой подсети с IP-адресом 192.168.1.252/24.

Проблема в том, что ServerA будет использовать свою маску подсети при определении, находится ли Client1 в той же подсети, что и он, или нет. если он считает, что Client1 находится в той же подсети, тогда ServerA попытается напрямую связаться с CLient1 и не будет отправлять трафик на маршрутизатор.

Использование схемы IP-адресации в вопросе. ServerA будет видеть свою сеть как 192.168.0.0/16 и, используя собственную маску подсети, будет думать, что Client1 также находится в сети 192.168.0.0/16.

сделайте все, что вам нужно сделать в Linux, чтобы включить маршрутизацию, но затем попробуйте изменить идентификатор сети на стороне клиента, возможно, на другой сетевой адрес:

172.16.0.0/16 или 10.0.0.0/8

Или все, что действительно начинается с 192.168

в качестве альтернативы вы можете изменить сетевой идентификатор сети, в которой находится serverA, на 192.168.0.0/24, который тоже будет работать,

Вы не можете пинговать от сервера к клиенту, потому что таким образом вы разрешаете только СВЯЗАННОЕ и УСТАНОВЛЕННОЕ соединение.

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

Когда вы отправляете пинг другим способом, он работает, потому что у вас другое правило для этого:

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

По умолчанию маршрутизация не активирована. Чтобы активировать маршрутизацию в Linux, вы должны добавить эту строку: net.ipv4.ip_forward = 1

В этом файле: /etc/sysctl.conf

Если вы хотите протестировать, вы можете активировать маршрутизацию с помощью этой команды: sysctl -w net.ipv4.ip_forward = 1

Ваш 192.168.0.0/16 (192.168.0.0 - 255.255) содержит 192.168.1.0/24 (192.168.1.0-255). Следовательно, у вас не может быть маршрута от ServerA до ClientX через ServerB.

Давайте оставим столько переменных, сколько есть, и изменим только необходимое:

Держать:

  • Конфигурация ClientX как есть.
  • ServerB eth0 как есть.
  • IP-адрес сервера 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, если она не перекрывается с 192.168.1.0/24; то /17 т.е. netmask 255.255.128.0 т.е. 192.168.128.0 - 192.168.255.255 как можно более широкий диапазон.

Это просто быстрое решение конкретной проблемы, пожалуйста, представьтесь CIDR.


Теперь по комментариям. Допустим, у вас много серверов, и вы хотите использовать каждый из них в качестве маршрутизатора из собственной подсети в 192.168.255.0/24, ServerA, будучи 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 через промежуточные серверы. Однако 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

Вы можете сделать это постоянным с помощью /etc/network/interfaces на 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