Ubuntu Router с различными сетевыми подсетями

У меня есть маршрутизатор Ubuntu 18.04 с несколькими интерфейсами локальной сети:

1-й интерфейс: 2-портовый сетевой адаптер 10G (интерфейсы связаны / объединены) bond1: интерфейсы: [enp5s0f0, enp5s0f1]

2-й интерфейс: 4-портовая сетевая карта enp8s0f0, enp8s0f1, enp9s0f0, enp9s0f1

Маршрутизатор выполняет функции шлюза и DHCP-сервера. В настоящее время 1-й и 2-й интерфейсы соединены вместе в 192.168.0.1 (интерфейс LAN). Моя текущая конфигурация netplan следующая:

 # This file describes the network interfaces available on your system
 # For more information, see netplan(5).
 network:
   version: 2
   renderer: networkd
   ethernets:
     enp0s8:
       dhcp4: no
       dhcp6: no
       addresses: [69.59.34.150/24]
       gateway4: 69.59.34.1
       nameservers:
       addresses: [69.60.173.84, 8.8.8.8]
       optional: true
     enp0s9:
       dhcp4: no
       dhcp6: no
     enp2s0f0:
  dhcp4: no
  dhcp6: no
     enp2s0f1:
       dhcp4: no
       dhcp6: no
     enp5s0f0:
       dhcp4: no
       dhcp6: no
     enp5s0f1:
       dhcp4: no
       dhcp6: no
     enp8s0f0:
       dhcp4: no
       dhcp6: no
     enp8s0f1:
       dhcp4: no
       dhcp6: no
     enp9s0f0:
       dhcp4: no
       dhcp6: no
     enp9s0f1:
       dhcp4: no
       dhcp6: no
   bonds:
     bond0:
       interfaces: [enp2s0f0, enp2s0f1]
       parameters:
             mode: 802.3ad
             lacp-rate: fast
             mii-monitor-interval: 100
     bond1:
       interfaces: [enp5s0f0, enp5s0f1]
       parameters:
             mode: 802.3ad
             lacp-rate: fast
             mii-monitor-interval: 100
   bridges:
     br0:
       addresses: [192.168.0.1/24]
       gateway4: 192.168.0.254
       routes:
       - to: 10.10.10.0/24
         via: 192.168.0.254
       - to: 20.20.20.0/24
         via: 192.168.0.254
       interfaces: [enp8s0f0, enp8s0f1, enp9s0f0, enp9s0f1, bond1]
       parameters:
            stp: false
            forward-delay: 0

Обратите внимание, что есть несколько других интерфейсов, но мой вопрос касается br0, который соединяет 4-портовую сетевую карту и 2-портовую сетевую карту 10G - все они находятся в одной подсети 192.168.0.x. Я указал шлюз (коммутатор на 192.168.0.254) для статической маршрутизации VLAN.

Я хотел бы разбить 4-портовый сетевой адаптер и 2-портовый сетевой адаптер 10G на разные подсети (т. Е. 2 ​​разных моста). Новая схема:

2 порта 10G NIC в подсети 192.168.0.x 4 порта NIC в подсети 192.168.1.x

Мне нужно было бы сохранить функциональность DHCP также в обеих подсетях (поставляются в той же коробке).

Мой dhcpd.conf выглядит следующим образом:

 subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.10 192.168.0.240;
         option routers 192.168.0.1;
    option domain-name "xxxxxx.org yyyyyyy.com";
    option domain-name-servers 192.168.0.1;
    option broadcast-address 192.168.0.255;
 }


 host DELL_PowerConnect_6248P {
         hardware ethernet aa:bb:cc:dd:ee:ff;
         fixed-address 192.168.0.254;
         option host-name "DELL_Powerconnect_6248P";
 }

Мой вопрос, в частности, такой: могу ли я разделить две NIC, создав другой мост с 4-портовым NIC в подсети 192.168.1.x, а затем просто добавив другую подсеть в файл конфигурации DHCP, и все будет работать?

Мои аргументы для этого просты. Сетевой адаптер 10G подключен к коммутатору 3-го уровня (выделенный), и я хотел бы использовать остальные 4 порта для работы так же, как домашний маршрутизатор. Теоретически, похоже, что это будет работать, но моя задача - сохранить функциональность DHCP в обеих подсетях. Заранее благодарю за любую помощь, которую вы можете оказать.

1 ответ

После долгих трудов и шести пакетов я нашел ответ на свой вопрос.

Сначала повторим: у меня есть встроенный маршрутизатор UBUNTU 18.04 с 3 NICS - я публикую это, потому что 18.04 использует netplan, и я не нашел подходящего ответа на досках объявлений для netplan.

NIC 1: встроенный гигабитный Ethernet - WAN

NIC 2: 2-портовый 10G NIC - связан и подключен к коммутатору уровня 3 (расположен по адресу 192.168.0.254) - подсеть 192.168.0.x

NIC 3: 4-портовый гигабитный NIC, используемый для локального доступа в Интернет (отдельно от коммутатора) - подсеть 192.168.1.x

Как видите, я хотел создать 2 подсети - 192.168.0.x для коммутатора и 192.168.1.x для 4-портового сетевого адаптера (для использования, даже если коммутатор был отключен).

Поскольку этот компьютер является маршрутизатором, он должен маршрутизировать, назначать IP-адреса (DHCP) и предоставлять DNS. Ниже вы найдете мою конфигурацию для netplan и DHCP. DHCP встречается в обеих подсетях, и NIC 3 имеет доступ в Интернет, даже если коммутатор отключен от NIC 2 (то есть он обходит коммутатор и использует маршрутизатор в качестве шлюза)

Когда вы посмотрите на конфигурацию, вы заметите 2 моста:

  • br0 - это 2-портовый сетевой адаптер 10G, подключенный к коммутатору
  • br1 - это 4-портовая гигабитная сетевая карта, используемая для доступа в Интернет, даже если коммутатор практически не работает как домашний маршрутизатор с 4 портами)

Это файл /etc/netplan/01-netcfg.yaml:

 # This file describes the network interfaces available on your system
 # For more information, see netplan(5).
 network:
   version: 2
   renderer: networkd
   ethernets:
     enp0s8:  #WAN interface
       dhcp4: no
       dhcp6: no
        addresses: [xxx.xxx.xxx.xxx/24] #Static IP assigned by ISP
        gateway4: xxx.xxx.xxx.xxx       #Gateway Assigned by ISP
       nameservers:
        addresses: [xxx.xxx.xxx.xxx, 8.8.8.8] #DNS assigned by ISP
  optional: true
enp0s9:  #Internal gigabit NIC Interface not used
  dhcp4: no
  dhcp6: no
enp2s0f0:  #10G NIC Not used
  dhcp4: no
  dhcp6: no
enp2s0f1:  #10G NIC not used
  dhcp4: no
  dhcp6: no
enp5s0f0:  #port 1 NIC2 (10G NIC Bonded connected to switch)
  dhcp4: no
  dhcp6: no
enp5s0f1:  #port 2 NIC2 (10G NIC Bonded connected to switch)
  dhcp4: no
  dhcp6: no
enp8s0f0:  #port1 NIC3 (gigabit NIC acting as home router)
  dhcp4: no
  dhcp6: no
enp8s0f1:  #port2 NIC3 (gigabit NIC acting as home router)
  dhcp4: no
  dhcp6: no
enp9s0f0:  #port3 NIC3 (gigabit NIC acting as home router)
  dhcp4: no
  dhcp6: no
enp9s0f1:  #port3 NIC3 (gigabit NIC acting as home router)
  dhcp4: no
  dhcp6: no
bonds:
  bond0: #first 10G NIC, not used
   interfaces: [enp2s0f0, enp2s0f1]
   parameters:
     mode: 802.3ad
     lacp-rate: fast
     mii-monitor-interval: 100
  bond1: #second 10G NIC, bonded and connected to switch
   interfaces: [enp5s0f0, enp5s0f1]
   parameters:
     mode: 802.3ad
     lacp-rate: fast
     mii-monitor-interval: 100
bridges:
  br0: #this is the 10G nic connected to switch on 192.168.0.x subnet
   dhcp4: no
   dhcp6: no
   addresses: [192.168.0.1/24] #router IP address
   interfaces: [bond1]
   gateway4: 192.168.0.254
   routes:
   - to: 192.168.1.1 #router IP address (gateway/DNS) for the 4 port NIC subnet
   via: 192.168.0.1 #This allows the br1 to access the internet via the main router IP (located at 192.168.0.1), bypassing the switch
   parameters:
     stp: false
     forward-delay: 0
  br1: #home router 4 port gigabit bridge
   dhcp4: no
   dhcp6: no
   addresses: [192.168.1.1/24]
   gateway: 192.168.1.1
   interfaces: [enp8s0f0, enp8s0f1, enp9s0f0, enp9s0f1]
   parameters:
     stp: false
     forward-delay: 0

Примечание: мост для связи 0 был сформирован, потому что мне нужна была подсеть 192.168.0.x на этом сетевом адаптере.

Мост br0 позволяет мосту br1, который находится в подсети 192.168.1.x, подключаться к Интернету через маршрутизатор (192.168.0.1)

Далее нам нужно настроить DHCP в ОБА подсетях. Вот Iptables:

 # Allow LAN to access internet enp0s8 is WAN interface - mask the LAN IP with that of the WAN interface
 iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE

 #Allow all subnet access to the internet, The IP address is the WAN IP Address
 iptables -t nat -A POSTROUTING -o enp0s8 -j SNAT --to-source 69.59.44.75
 # Service rules

 # basic global accept rules - ICMP, loopback, traceroute, established all accepted
 iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
 iptables -A INPUT -p icmp -j ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

 # enable traceroute rejections to get sent out
 iptables -A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable

 # DNS - accept from LAN
 iptables -A INPUT -i br0 -p tcp --dport 53 -j ACCEPT
 iptables -A INPUT -i br0 -p udp --dport 53 -j ACCEPT
 iptables -A INPUT -i br1 -p tcp --dport 53 -j ACCEPT
 iptables -A INPUT -i br1 -p udp --dport 53 -j ACCEPT

 # SSH - accept from LAN
 iptables -A INPUT -i br0 -p tcp --dport 8880 -j ACCEPT
 iptables -A INPUT -i br1 -p tcp --dport 8880 -j ACCEPT

 # DHCP client requests - accept from LAN
 iptables -A INPUT -i br0 -p udp --dport 67:68 -j ACCEPT
 iptables -A INPUT -i br1 -p udp --dport 67:68 -j ACCEPT

 # drop all other inbound traffic
 iptables -A INPUT -j DROP

 # Forwarding rules
 # forward packets along established/related connections
 iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

 # forward from LAN (br0, br1) to WAN (enp0s8)
 iptables -A FORWARD -i br0 -o enp0s8 -j ACCEPT
 iptables -A FORWARD -i br1 -o enp0s8 -j ACCEPT

 # allow traffic from our NAT pinhole (PORT FORWARDING)
 iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 8888 -j ACCEPT
 iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8888 -j ACCEPT

 # drop all other forwarded traffic
 iptables -A FORWARD -j DROP

Здесь важно отметить, что все, что я перечислил для br0, я продублировал для br1

Наконец, нам нужно настроить DHCP и убедиться, что он работает в обеих подсетях. Это файл / etc / default / isc-dhcp-server:

 # On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
 # Separate multiple interfaces with spaces, e.g. "eth0 eth1".
 INTERFACESv4="br0 br1"
 INTERFACESv6="br0 br1"

Наконец, нам нужно изменить файл /etc/dhcp/dhcpd.conf:

 .......
 subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.10 192.168.0.240;
    option routers 192.168.0.1;
    option domain-name "yourdomain.com";
    option domain-name-servers 192.168.0.1;
    option broadcast-address 192.168.0.255;
 }

 subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.240;
    option routers 192.168.1.1;
    option domain-name "yourdomain2.org";
    option domain-name-servers 192.168.1.1;
    option broadcast-address 192.168.1.255;
 }
 # Add a section to reserve static IPs --------  This must be done for the network switch to enable static routing if needed

 host DELL_PowerConnect_6248P {
         hardware ethernet XX:XX:XX:XX:XX:XX;
         fixed-address 192.168.0.254; #this is the layer 3 switch connected to NIC2 which serves as the gateway for the 192.168.0.x subnet
         option host-name "DELL_Powerconnect_6248P";  
 }

Это сработало для меня. Теперь я могу использовать маршрутизатор как домашний маршрутизатор даже с отключенным коммутатором. ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Это ни в коем случае не список того, что нужно сделать, чтобы создать свой собственный маршрутизатор Ubuntu. Есть много других шагов. Это можно легко найти в интернете. Надеюсь, этот небольшой урок поможет кому-то в будущем. Нетплан - это боль, но довольно просто. Если такой идиот, как я, может это сделать, то любой может. Счастливого Ubuntu-ing.

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

 ................
   bridges:
    br0:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.0.1/24]
 #   gateway4: 192.168.0.254 # because we are using static routes, this option is not needed
     interfaces: [bond1]
     routes:
     - to: 0.0.0.0/0
     via: 192.168.0.254
     metric: 100
 #   Here, we have routed ALL subnets and all netmasks. Metric must be supplied if the gateway is not specified.
     - to: 192.168.1.1/24
     via: 192.168.0.1
     metric: 100
 #   Note: Even though we are specifying ALL subnets above, we can still have routing for a particular subnet so that all routes go to 192.168.0.254, but only 192.168.1.x subnet routes through 192.168.0.1
     parameters:
       stp: false
       forward-delay: 0   
    br1:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.1.1/24]
     gateway: 192.168.1.1
 #   Here a gateway is specified, because there are no static routes
     interfaces: [enp8s0f0, enp8s0f1, enp9s0f0, enp9s0f1]
     parameters:
       stp: false
       forward-delay: 0

Как видите, я настроил конфиг, чтобы доказать свою точку зрения. Даже если ВСЕ подсети по умолчанию направлены на 192.168.0.254, 192.168.1.x является исключением и специально направляется на 192.168.0.1. Таким образом, я все еще могу получить доступ к Интернету на 4-портовом устройстве, даже если коммутатор отключен.

Теперь роутер работает и не выходил из строя уже несколько часов. О настройке bind, OpenVPN и других полезных вещей.

Я смог изучить все это, посмотрев примеры netplan, указанные на https://netplan.io/examples

Надеюсь, это пригодится при настройке netplan.

Другие вопросы по тегам