Linux. Сетевой мост и Virtual LAN
24.02.2024
Теги: Bridge • Linux • Ubuntu • VLAN • Конфигурация • ЛокальнаяСеть
Случайно нашел на YouTube интересное видео по настройке сети. Затрагивались темы сетевого моста и виртуальной локальной сети. Так что решил повторить, чтобы разобраться получше. Слышал много раз про мост и VLAN — но сам никогда не сталкивался. При создании виртуальных машин в VirtualBox нам потребуется создать пять внутренних сетей net1
, net2
, net3
, net4
и net5
.
Первый этап
Создаем и настраиваем виртуальные машины gateway1
, dhcpd1
и pc1
.
Настройка шлюза gateway1
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yamlf
network: ethernets: enp0s3: dhcp4: true dhcp6: false enp0s8: addresses: [10.1.1.1/24] nameservers: addresses: [1.0.0.1, 8.8.4.4] version: 2
Разрешаем пересылку пакетов между интерфейсами
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
$ sudo sysctl -p net.ipv4.ip_forward=1
Настраиваем netfilter
с помощью iptables
$ sudo iptables -P FORWARD DROP # сначала все запрещаем, потом разрешаем необходимое
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -d 10.1.1.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -s 10.1.1.0/24 -j ACCEPT
Добавляем маскарадинг (подмена адерса источника)
$ sudo iptables -t nat -A POSTROUTING -o enp0s3 -s 10.1.1.0/24 -j MASQUERADE
Настройка сервера dhcpd1
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: addresses: [10.1.1.2/24] nameservers: addresses: [1.0.0.1, 8.8.4.4] routes: - to: default via: 10.1.1.1 version: 2
$ sudo netplan apply
Устанавливаем пакет isc-dhcp-server
$ sudo apt install isc-dhcp-server
Редактируем файлы конфигурации
$ sudo nano /etc/default/isc-dhcp-server
# на каком интерфейсе прослушивать запросы клиентов INTERFACESv4="enp0s3" INTERFACESv6=""
$ sudo nano /etc/dhcp/dhcpd.conf
# адреса DNS-серверов option domain-name-servers 77.88.8.8,77.88.8.1; # время аренды по умолчанию default-lease-time 3600; # максимальное время аренды max-lease-time 7200; # локальная сеть: адрес и маска subnet 10.1.1.0 netmask 255.255.255.0 { # пул ip-адресов range 10.1.1.5 10.1.1.15; # маска подсети option subnet-mask 255.255.255.0; # ip-адрес шлюза option routers 10.1.1.1; }
Перезагружаем службу для применения настроек
$ sudo systemctl restart isc-dhcp-server.service
Настройка компьютера pc1
Настройка сети виртуальной машины с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: true dhcp6: false version: 2
$ sudo netplan apply
Второй этап
Создаем и настраиваем виртуальные машины gateway2
, dhcpd2
и pc2
.
Настройка шлюза gateway2
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: true dhcp4: false enp0s8: addresses: [10.2.2.1/24] nameservers: addresses: [1.0.0.1, 8.8.4.4] version: 2
$ sudo netplan apply
Разрешаем пересылку пакетов между интерфейсами
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
$ sudo sysctl -p net.ipv4.ip_forward=1
Настраиваем netfilter
с помощью iptables
$ sudo iptables -P FORWARD DROP # сначала все запрещаем, потом разрешаем необходимое
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -d 10.2.2.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -s 10.2.2.0/24 -j ACCEPT
Добавляем маскарадинг (подмена адреса источника)
$ sudo iptables -t nat -A POSTROUTING -o enp0s3 -s 10.2.2.0/24 -j MASQUERADE
Созданные правила пропадут при перезагрузке виртуальной машины. Так что их нужно сохранить и восстанавливать при перезагрузке.
$ sudo apt install iptables-persistent
Настройка сервера dhcpd2
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: addresses: [10.2.2.2/24] nameservers: addresses: [1.0.0.1, 8.8.4.4] routes: - to: default via: 10.2.2.1 version: 2
$ sudo netplan apply
Устанавливаем пакет isc-dhcp-server
$ sudo apt install isc-dhcp-server
Редактируем файлы конфигурации
$ sudo nano /etc/default/isc-dhcp-server
# на каком интерфейсе прослушивать запросы клиентов INTERFACESv4="enp0s3" INTERFACESv6=""
$ sudo nano /etc/dhcp/dhcpd.conf
# адреса DNS-серверов option domain-name-servers 77.88.8.8,77.88.8.1; # время аренды по умолчанию default-lease-time 3600; # максимальное время аренды max-lease-time 7200; # локальная сеть: адрес и маска subnet 10.2.2.0 netmask 255.255.255.0 { # пул ip-адресов range 10.2.2.5 10.2.2.15; # маска подсети option subnet-mask 255.255.255.0; # ip-адрес шлюза option routers 10.2.2.1; }
Перезагружаем службу для применения настроек
$ sudo systemctl restart isc-dhcp-server.service
Настройка компьютера pc2
Настройка сети виртуальной машины с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: true dhcp6: false version: 2
$ sudo netplan apply
Третий этап
Создаем виртуальные машины bridge1
и pc3
. Сетевые интерфейсы enp0s3
и enp0s8
виртуальной машины bridge1
нужно переключить в неразборчивый режим (promiscuous mode), чтобы принимать весь ethernet-трафик. Эти интерфейсы будут входить в сетевой мост — вместо двух маленьких сетей net1
и net3
получим одну большую сеть (широковещательный домен). И виртуальная машина pc3
получит сетевые настройки от dhcpd1
.
Неразборчивый режим для сетевых интерфейсов необходимо еще включить на уровне VirtualBox — иначе сетевой мост работать не будет. Мне этот момент не очень понятен — получается, что включение promiscuous mode внутри виртуальной машины не влияет на promiscuous mode на уровне VirtualBox. Хотя внутри виртуальной машины работает команда tcpdump
, которая тоже переводит интерфейс в неразборчивый режим — но без участия VirtualBox.
Настройка моста bridge1
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: false dhcp6: flase enp0s8: dhcp4: false dhcp6: flase enp0s9: dhcp4: false dhcp6: flase version: 2
$ sudo netplan apply
Включаем неразборчивый режим
$ sudo ip link set enp0s3 promisc on $ sudo ip link set enp0s8 promisc on
Создаем сетевой мост br13
$ sudo ip link add name br13 type bridge
Добавляем интерфейсы в мост
$ sudo ip link set enp0s3 master br13 $ sudo ip link set ens0s8 master br13
Удалить интерфейсы из моста и удалить сам мост можно с помощью следующих команд
$ sudo ip link set enp0s3 nomaster $ sudo ip link set enp0s8 nomaster $ sudo ip link del br13 type bridge
Посмотрим, что получилось в итоге
$ bridge link 2: enp0s3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br13 state forwarding priority 32 cost 4 3: enp0s8: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br13 state forwarding priority 32 cost 4
Сейчас мост в состоянии DOWN
, переключим его в состояние UP
$ sudo ip link set dev br13 up
br
означает bridge
, число 1 означает net1
, число 3 означает net3
.
Настройка компьютера pc3
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: true dhcp6: false version: 2
$ sudo netplan apply
Четвертый этап
Создаем виртуальные машины bridge2
и pc5
. Сетевые интерфейсы enp0s3
и enp0s8
виртуальной машины bridge2
нужно переключить в неразборчивый режим (promiscuous mode), чтобы принимать весь ethernet-трафик. Эти интерфейсы будут входить в сетевой мост — наша большая сеть станет еще больше. И виртуальная машина pc5
получит сетевые настройки от dhcpd1
.
Настройка моста bridge2
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: false dhcp6: false enp0s8: dhcp4: false dhcp6: false enp0s9: dhcp4: false dhcp6: false version: 2
$ sudo netplan apply
Включаем неразборчивый режим
$ sudo ip link set enp0s3 promisc on $ sudo ip link set enp0s8 promisc on
Создаем сетевой мост br35
$ sudo ip link add name br35 type bridge
Добавляем интерфейсы в мост
$ sudo ip link set enp0s3 master br35 $ sudo ip link set ens0s8 master br35
Удалить интерфейсы из моста и удалить сам мост можно с помощью следующих команд
$ sudo ip link set enp0s3 nomaster $ sudo ip link set enp0s8 nomaster $ sudo ip link del br35 type bridge
Посмотрим, что получилось в итоге
$ bridge link 2: enp0s3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br35 state forwarding priority 32 cost 4 3: enp0s8: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br35 state forwarding priority 32 cost 4
Сейчас мост в состоянии DOWN
, переключим его в состояние UP
$ sudo ip link set dev br35 up
br
означает bridge
, число 3 означает net3
, число 5 означает net5
.
Настройка компьютера pc5
Настройка сети с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: true dhcp6: false version: 2
$ sudo netplan apply
Пятый этап
Между bridg1
и bridge2
есть только один канал связи. Но у нас две локальные сети, в первую входят pc1
, pc3
, pc5
, во вторую должны входить pc2
и pc4
. Как присоединить pc4
ко второй локальной сети, используя один канал связи?
Между bridg1
и bridge2
все ethernet-кадры будут помечены специальным тегом. Кадры, которые относятся к первой локальной сети — будут помечены тегом с идентификатором 11. Кадры, которые относятся ко второй локальной сети — будут помечены тегом с идентификатором 22.
На виртуальной машине bridge1
- физический интерфейс
enp0s8
получает тегированные ethernet-кадры с идентификаторами 11 и 22 - виртуальный интерфейс
vlan11@enp0s8
получает ethernet-кадры с удаленным тегом (которые вenp0s8
были с тегом 11) - виртуальный интерфейс
vlan22@enp0s8
получает ethernet-кадры с удаленным тегом (которые вenp0s8
были с тегом 22) - физический интерфейс
enp0s3
и виртуальный интерфейсvlan11@enp0s8
входят в сетевой мостbr1v11
- физический интерфейс
enp0s9
и виртуальный интерфейсvlan22@enp0s8
входят в сетевой мостbr2v22
enp0s3
передает полученные извне кадры вvlan11@enp0s8
, оттуда они попадают вenp0s8
— уже с тегом 11enp0s9
передает полученные извне кадры вvlan22@enp0s8
, оттуда они попадают вenp0s8
— уже с тегом 22
На виртуальной машине bridge2
- физический интерфейс
enp0s3
получает тегированные ethernet-кадры с идентификаторами 11 и 22 - виртуальный интерфейс
vlan11@enp0s3
получает ethernet-кадры с удаленным тегом (которые вenp0s3
были с тегом 11) - виртуальный интерфейс
vlan22@enp0s3
получает ethernet-кадры с удаленным тегом (которые вenp0s3
были с тегом 22) - физический интерфейс
enp0s8
и виртуальный интерфейсvlan11@enp0s3
входят в сетевой мостbr5v11
- физический интерфейс
enp0s9
и виртуальный интерфейсvlan22@enp0s3
входят в сетевой мостbr4v22
enp0s8
передает полученные извне кадры вvlan11@enp0s3
, оттуда они попадат вenp0s3
— уже с тегом 11enp0s9
передает полученные извне кадры вvlan22@enp0s3
, оттуда они попадат вenp0s3
— уже с тегом 22
На виртуальной машине bridge1
Создаем интерфейс vlan11
типа vlan
, который будет составной частью интерфейса enp0s8
.
$ sudo ip link add link enp0s8 name vlan11 type vlan id 11
Сетевые интерфейсы vlan11@enp0s8
и enp0s3
будут входить в состав сетевого моста br1v11
.
$ sudo ip link add name br1v11 type bridge
$ sudo ip link set vlan11 master br1v11 $ sudo ip link set enp0s3 master br1v11
Создаем интерфейс vlan22
типа vlan
, который будет составной частью интерфейса enp0s8
.
$ sudo ip link add link enp0s8 name vlan22 type vlan id 22
Сетевые интерфейсы vlan11@enp0s8
и enp0s9
будут входить в состав сетевого моста br2v22
.
$ sudo ip link add name br2v22 type bridge
$ sudo ip link set vlan22 master br2v22 $ sudo ip link set enp0s9 master br2v22
Включаем неразборчивый режим для enp0s9
$ sudo ip link set enp0s9 promisc on
Изменяем состояние интерфейсов с DOWN
на UP
$ sudo ip link set dev vlan11 up $ sudo ip link set dev vlan22 up $ sudo ip link set dev br1v11 up $ sudo ip link set dev br2v22 up
На виртуальной машине bridge2
Создаем интерфейс vlan11
типа vlan
, который будет составной частью интерфейса enp0s3
.
$ sudo ip link add link enp0s3 name vlan11 type vlan id 11
Сетевые интерфейсы vlan11@enp0s3
и enp0s8
будут входить в состав сетевого моста br5v11
.
$ sudo ip link add name br5v11 type bridge
$ sudo ip link set vlan11 master br5v11 $ sudo ip link set enp0s8 master br5v11
Создаем интерфейс vlan22
типа vlan
, который будет составной частью интерфейса enp0s3
.
$ sudo ip link add link enp0s3 name vlan22 type vlan id 22
Сетевые интерфейсы vlan11@enp0s3
и enp0s9
будут входить в состав сетевого моста br4v22
.
$ sudo ip link add name br4v22 type bridge
$ sudo ip link set vlan22 master br4v22 $ sudo ip link set enp0s9 master br4v22
Включаем неразборчивый режим для enp0s9
$ sudo ip link set enp0s9 promisc on
Изменяем состояние интерфейсов с DOWN
на UP
$ sudo ip link set dev vlan11 up $ sudo ip link set dev vlan22 up $ sudo ip link set dev br2v11 up $ sudo ip link set dev br4v22 up
Шестой этап
Непонятная ситуация с виртуальной машиной pc3
— она получает тегированный трафик из двух виртуальных сетей, но правильно работать с ним не умеет. Самый простой вариант — подключить ее к внутренней сети VirtualBox net1
или net5
вместо net3
. Но можем научить pc3
работать с тегированным трафиком и сделать из нее маршрутизатор.
Создаем интерфейсы vlan11
и vlan22
, которые будет составной частью интерфейса enp0s3
. Вместо выполнения команд будем редактировать файл конфигурации сети.
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: false dhcp6: false vlans: vlan11: id: 11 link: enp0s3 dhcp4: true dhcp6: false vlan22: id: 22 link: enp0s3 dhcp4: true dhcp6: false version: 2
$ sudo netplan apply
Проверим, что получилось в итоге
$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:57:b9:8b brd ff:ff:ff:ff:ff:ff inet6 fe80::a00:27ff:fe57:b98b/64 scope link valid_lft forever preferred_lft forever 3: vlan11@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 08:00:27:57:b9:8b brd ff:ff:ff:ff:ff:ff inet 10.1.1.11/24 metric 100 brd 10.1.1.255 scope global dynamic vlan11 valid_lft 3254sec preferred_lft 3254sec inet6 fe80::a00:27ff:fe57:b98b/64 scope link valid_lft forever preferred_lft forever 4: vlan22@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 08:00:27:57:b9:8b brd ff:ff:ff:ff:ff:ff inet 10.2.2.6/24 metric 100 brd 10.2.2.255 scope global dynamic vlan22 valid_lft 3254sec preferred_lft 3254sec inet6 fe80::a00:27ff:fe57:b98b/64 scope link valid_lft forever preferred_lft forever
Интерфейс vlan11@enp0s3
получил сетевые настройки от dhcp-сервера dhcpd1
, интерфейс vlan22@enp0s3
получил сетевые настройки от dhcp-сервера dhcpd2
. А вот с маршрутами беда — есть два default, по одному от каждого dhcp-сервера.
$ ip route default via 10.1.1.1 dev vlan11 proto dhcp src 10.1.1.11 metric 100 default via 10.2.2.1 dev vlan22 proto dhcp src 10.2.2.6 metric 100 10.1.1.0/24 dev vlan11 proto kernel scope link src 10.1.1.11 metric 100 10.1.1.1 dev vlan11 proto dhcp scope link src 10.1.1.11 metric 100 10.2.2.0/24 dev vlan22 proto kernel scope link src 10.2.2.6 metric 100 10.2.2.1 dev vlan22 proto dhcp scope link src 10.2.2.6 metric 100 77.88.8.1 via 10.1.1.1 dev vlan11 proto dhcp src 10.1.1.11 metric 100 77.88.8.1 via 10.2.2.1 dev vlan22 proto dhcp src 10.2.2.6 metric 100 77.88.8.8 via 10.1.1.1 dev vlan11 proto dhcp src 10.1.1.11 metric 100 77.88.8.8 via 10.2.2.1 dev vlan22 proto dhcp src 10.2.2.6 metric 100
Если мы делаем маршрутизатор — он не должен получать случайный ip-адрес от dhcp-сервера
$ sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: enp0s3: dhcp4: false dhcp6: false vlans: vlan11: id: 11 link: enp0s3 dhcp4: false addresses: [10.1.1.3/24] routes: - to: default via: 10.1.1.1 metric: 50 nameservers: addresses: [77.88.8.8, 77.88.8.1] dhcp6: false vlan22: id: 22 link: enp0s3 dhcp4: false addresses: [10.2.2.3/24] routes: - to: default via: 10.2.2.1 metric: 100 nameservers: addresses: [77.88.8.8, 77.88.8.1] dhcp6: false version: 2
$ sudo netplan apply
Проверим, что получилось в итоге
$ ip route default via 10.1.1.1 dev vlan11 proto static metric 50 default via 10.2.2.1 dev vlan22 proto static metric 100 10.1.1.0/24 dev vlan11 proto kernel scope link src 10.1.1.3 10.2.2.0/24 dev vlan22 proto kernel scope link src 10.2.2.3
vlan22@enp0s3
— виртуальная машина router
будет отправлять ответ через vlan11@enp0s3
— если маршрут до ip-адреса отправителя неизвестен. Policy based routing позволяет отправлять ответ через тот же интерфейс, с которого были получены пакеты.
Разрешаем пересылку пакетов между интерфейсами
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
$ sudo sysctl -p net.ipv4.ip_forward=1
Настраиваем netfilter
с помощью iptables
$ sudo iptables -P FORWARD DROP # сначала все запрещаем, потом разрешаем необходимое
$ sudo iptables -A FORWARD -i vlan11 -o vlan22 -s 10.1.1.0/24 -d 10.2.2.0/24 -j ACCEPT $ sudo iptables -A FORWARD -i vlan22 -o vlan11 -s 10.2.2.0/24 -d 10.1.1.0/24 -j ACCEPT
Созданные правила пропадут при перезагрузке виртуальной машины. Так что их нужно сохранить и восстанавливать при перезагрузке.
$ sudo apt install iptables-persistent
Всем компьютерам первой сети 10.1.1.0/24
нужно добавить маршрут до второй сети 10.2.2.0/24
. Всем компьютерам второй сети 10.2.2.0/24
нужно добавить маршрут до первой сети 10.1.1.0/24
. Для этого отредактируем файлы конфигурации dhcp-серверов.
Файл конфигурации dhcp-сервера на виртуальной машине dhcpd1
$ sudo nano /etc/dhcp/dhcpd.conf
# адреса DNS-серверов option domain-name-servers 77.88.8.8,77.88.8.1; # время аренды по умолчанию default-lease-time 3600; # максимальное время аренды max-lease-time 7200; # для добавления статических маршрутов option classless-static-routes code 121 = array of unsigned integer 8; # Локальная сеть: адрес и маска subnet 10.1.1.0 netmask 255.255.255.0 { # пул ip-адресов range 10.1.1.5 10.1.1.15; # маска подсети option subnet-mask 255.255.255.0; # ip-адрес шлюза option routers 10.1.1.1; # маршрут до 10.2.2.0/24 через 10.2.2.3 + маршрут по умолчанию; # согласно RFC3442 опция 3 (маршрут по умолчанию) игнорируется # при наличии DHCP-опции 121 (статические маршруты), поэтому # кроме маршрута к сети 10.2.2.0/24 добавляем default маршрут option classless-static-routes 24, 10,2,2, 10,2,2,3, 0, 10,1,1,1; }
$ sudo systemctl restart isc-dhcp-server.service
Файл конфигурации dhcp-сервера на виртуальной машине dhcpd2
$ sudo nano /etc/dhcp/dhcpd.conf
# адреса DNS-серверов option domain-name-servers 77.88.8.8,77.88.8.1; # время аренды по умолчанию default-lease-time 3600; # максимальное время аренды max-lease-time 7200; # для добавления статических маршрутов option classless-static-routes code 121 = array of unsigned integer 8; # Локальная сеть: адрес и маска subnet 10.2.2.0 netmask 255.255.255.0 { # пул ip-адресов range 10.2.2.5 10.2.2.15; # маска подсети option subnet-mask 255.255.255.0; # ip-адрес шлюза option routers 10.2.2.1; # маршрут до 10.1.1.0/24 через 10.1.1.3 + маршрут по умолчанию; # согласно RFC3442 опция 3 (маршрут по умолчанию) игнорируется # при наличии DHCP-опции 121 (статические маршруты), поэтому # кроме маршрута к сети 10.1.1.0/24 добавляем default маршрут option classless-static-routes 24, 10,1,1, 10,1,1,3, 0, 10,2,2,1; }
$ sudo systemctl restart isc-dhcp-server.service
Заключительный этап
После перезагрузки виртуальных машин bridge1
и bridge2
нужно заново создавать мосты и переключать интерфейсы в неразборчивый режим. Так что редактируем файл конфигурации сети и создаем службу — все будет происходить автоматически при загрузке системы. Давайте сделаем это для bridge1
— для bridge2
все будет аналогично.
Создаем службу для переключения интерфейсов в неразборчивый режим
$ sudo nano /etc/systemd/system/promisc@.service
[Unit] Description=Set %i interface in promiscuous mode After=network.target [Service] Type=oneshot ExecStart=/usr/bin/ip link set dev %i promisc on RemainAfterExit=yes [Install] WantedBy=multi-user.target
Сообщаем системе о создании новой службы
$ sudo systemctl daemon-reload
Добавляем созданные службы в автозагрузку
$ sudo systemctl enable promisc@enp0s3.service $ sudo systemctl enable promisc@enp0s8.service $ sudo systemctl enable promisc@enp0s9.service
Настройка сетевых мостов и vlan с помощью netplan
$ sudo nano /etc/netplan/01-netcfg.yaml
# для виртуальной машины bridge1 network: ethernets: enp0s3: dhcp4: false dhcp6: false enp0s8: dhcp4: false dhcp6: false enp0s9: dhcp4: false dhcp6: false vlans: vlan11: id: 11 link: enp0s8 dhcp4: false dhcp6: false vlan22: id: 22 link: enp0s8 dhcp4: false dhcp6: false bridges: br1v11: interfaces: [enp0s3, vlan11] dhcp4: false dhcp6: false br2v22: interfaces: [enp0s9, vlan22] dhcp4: false dhcp6: false version: 2
$ sudo netplan apply
Смотрим, что получилось в итоге
$ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br1v11 state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:1d:7b:bc brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:7b:0f:fb brd ff:ff:ff:ff:ff:ff 4: enp0s9: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br2v22 state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:61:1c:41 brd ff:ff:ff:ff:ff:ff 5: br1v11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ce:f6:6d:43:0e:62 brd ff:ff:ff:ff:ff:ff 6: br2v22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether e6:6e:df:f6:3b:18 brd ff:ff:ff:ff:ff:ff 7: vlan11@enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1v11 state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:7b:0f:fb brd ff:ff:ff:ff:ff:ff 8: vlan22@enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br2v22 state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:7b:0f:fb brd ff:ff:ff:ff:ff:ff
$ bridge link 2: enp0s3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br1v11 state forwarding priority 32 cost 4 4: enp0s9: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br2v22 state forwarding priority 32 cost 4 7: vlan11@enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br1v11 state forwarding priority 32 cost 4 8: vlan22@enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br2v22 state forwarding priority 32 cost 4
Для виртуальной машины bridge2
все будет аналогично, так что не буду повторять — только файл конфигурации netplan.
# для виртуальной машины bridge2 network: ethernets: enp0s3: dhcp4: false dhcp6: false enp0s8: dhcp4: false dhcp6: false enp0s9: dhcp4: false dhcp6: false vlans: vlan11: id: 11 link: enp0s3 dhcp4: false dhcp6: false vlan22: id: 22 link: enp0s3 dhcp4: false dhcp6: false bridges: br5v11: interfaces: [enp0s8, vlan11] dhcp4: false dhcp6: false br4v22: interfaces: [enp0s9, vlan22] dhcp4: false dhcp6: false version: 2
- Ubuntu. Настройка сети
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
Поиск: Linux • Ubuntu • Конфигурация • Локальная сеть • Bridge • Мост • VLAN