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

Как правильно настроить маршрутизацию на машине с 4 интерфейсами, чтобы три интерфейса находились в одной подсети?

Итак, у меня есть Linux-машина с 4 интерфейсами:

  1. enp1s0
  2. enp2s0
  3. enp3s0
  4. enp4s0

Я бы сделал enp1s0 интерфейсом WAN и получил его IP-адрес, DNS и шлюз через DHCP.

Для остальных трех интерфейсов я бы хотел, чтобы они имели:

Вот что я получил на данный момент:

cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# listed as #1 
# this is the wan interface
auto enp1s0
iface enp1s0 inet dhcp

# listed as #2
# this routes to upstairs
auto enp3s0
iface enp3s0 inet static
    address 192.168.47.254
    netmask 255.255.255.0
    network 192.168.47.0    
    broadcast 192.168.47.255    

# listed as #4
auto enp2s0
iface enp2s0 inet static
    address 192.168.47.253
    netmask 255.255.255.0
    network 192.168.47.0    
    broadcast 192.168.47.255    

# listed as #3
auto enp4s0
iface enp4s0 inet static
    address 192.168.47.252
    netmask 255.255.255.0
    network 192.168.47.0    
    broadcast 192.168.47.255    
cat /etc/dnsmasq.conf
interface=enp2s0
interface=enp3s0
interface=enp4s0
listen-address=192.168.47.254 # Explicitly specify the address to listen on  
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere  
server=8.8.8.8       # Forward DNS requests to Google DNS  
domain-needed        # Don't forward short names  
bogus-priv           # Never forward addresses in the non-routed address spaces.  
dhcp-range=192.168.47.100,192.168.47.250,12h # Assign IP addresses between 192.168.46.100-250 with a 12 hour lease time 

log-dhcp
log-queries
interface=enp2s0      # Use interface wlan0  
interface=enp3s0      # Use interface wlan0  
interface=enp4s0      # Use interface wlan0  
listen-address=192.168.47.254 # Explicitly specify the address to listen on  
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere  
server=8.8.8.8       # Forward DNS requests to Google DNS  
domain-needed        # Don't forward short names  
bogus-priv           # Never forward addresses in the non-routed address spaces.  
dhcp-range=192.168.47.100,192.168.47.250,12h # Assign IP addresses between 192.168.46.100-250 with a 12 hour lease time 

log-dhcp
log-queries

А вот пример таблицы IP-маршрутов с одной из клиентских машин:

ip -one addr
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: eth0    inet 192.168.46.5/24 brd 192.168.46.255 scope global eth0\       valid_lft forever preferred_lft forever
2: eth0    inet6 fe80::82ee:73ff:fe5d:89d1/64 scope link \       valid_lft forever preferred_lft forever
3: eth1    inet 192.168.47.244/24 brd 192.168.47.255 scope global eth1\       valid_lft forever preferred_lft forever
3: eth1    inet6 fe80::82ee:73ff:fe5d:89d0/64 scope link \       valid_lft forever preferred_lft forever
route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.46.1    0.0.0.0         UG    0      0        0 eth0
192.168.46.0    0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.47.0    0.0.0.0         255.255.255.0   U     1      0        0 eth1

Что пока работает:

После долгого чтения я определил, что мне нужны статические маршруты, разные подсети для каждого интерфейса LAN или мост.

В идеале я хотел бы установить разрешения в shorewall на основе интерфейса и по-прежнему использовать одну подсеть для всех интерфейсов LAN.

Вы вообще ошиблись, и это не имеет ничего общего с Shorewall (или действительно любым другим пакетом межсетевого экрана), а скорее с IP-сетью в целом.

Если вы представите себе, что данный IP-хост имеет три интерфейса в одной подсети, и пакет приходит для этой подсети из четвертой, откуда этот хост знает который из трех интерфейсов должен получить пакет? Есть ли ARP во всех трех? Он просто отправляет весь трафик первому пришедшему, тем самым предотвращая привязку трафика к двум другим? Вот почему, если вы попытаетесь настроить это из оболочки, вы получите сообщение об ошибке о перекрытии подсетей.

Итак, у вас есть три разумных варианта с парой подвариантов.

  1. Выгрузите два других интерфейса и просто подключите один порт к коммутатору, а затем отключите хосты (и, возможно, Wi-Fi в той же подсети) от этого коммутатора. Это возможно объединить все три ваших внутренних интерфейса в единую связку или команду, но это в основном требует всех трех физический интерфейсов и превращает их в единый логичный интерфейс.

  2. Создайте интерфейс моста Linux. Передайте мосту IP, DHCP и другие элементы конфигурации, а затем подключите три физических интерфейса в качестве членов моста. Ваш брандмауэр видит интерфейс единственного моста как внутренний (... даже если он связан с тремя сегментами). Опять же - с точки зрения IP у вас есть один интерфейс во внутренней подсети, а не три.

  3. Поместите три интерфейса в три неперекрывающиеся IP-подсети и настройте соответствующим образом.