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.