Сеть 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.
Давайте оставим столько переменных, сколько есть, и изменим только необходимое:
Держать:
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, если она не перекрывается с 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