Итак, у меня есть Linux-машина с 4 интерфейсами:
Я бы сделал 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 во всех трех? Он просто отправляет весь трафик первому пришедшему, тем самым предотвращая привязку трафика к двум другим? Вот почему, если вы попытаетесь настроить это из оболочки, вы получите сообщение об ошибке о перекрытии подсетей.
Итак, у вас есть три разумных варианта с парой подвариантов.
Выгрузите два других интерфейса и просто подключите один порт к коммутатору, а затем отключите хосты (и, возможно, Wi-Fi в той же подсети) от этого коммутатора. Это возможно объединить все три ваших внутренних интерфейса в единую связку или команду, но это в основном требует всех трех физический интерфейсов и превращает их в единый логичный интерфейс.
Создайте интерфейс моста Linux. Передайте мосту IP, DHCP и другие элементы конфигурации, а затем подключите три физических интерфейса в качестве членов моста. Ваш брандмауэр видит интерфейс единственного моста как внутренний (... даже если он связан с тремя сегментами). Опять же - с точки зрения IP у вас есть один интерфейс во внутренней подсети, а не три.
Поместите три интерфейса в три неперекрывающиеся IP-подсети и настройте соответствующим образом.