Вопрос или проблема
Я хочу использовать два сетевых интерфейса (enp7s0 и enp8s0) одновременно на Ubuntu 22.04. У каждого из них есть отдельное подключение к интернету. Мой основной интерфейс – enp8s0, в который я сначала подключил LAN-кабель. Я думаю, что мне нужно установить маршрутизирующую таблицу для этого.
Итак, я отредактировал
/etc/iproute2/rt_tables
следующим образом
1 rt2
ip route add 192.168.0.0/24 dev enp7s0 src 192.168.0.101 table rt2
ip route add default via 192.168.0.1 dev enp7s0 table rt2
ip rule add from 192.168.0.101/32 table rt2
ip rule add to 192.168.0.101/32 table rt2
вот мой ifconfig
enp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::9c8b:3fe5:795e:bd32 prefixlen 64 scopeid 0x20<link>
ether d8:5e:d3:01:84:ed txqueuelen 1000 (Ethernet)
RX packets 19214 bytes 18384493 (18.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11885 bytes 1705118 (1.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xfc700000-fc71ffff
enp8s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.16 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 2403:6200:89a6:96ee:7aba:94ac:f7e5:421c prefixlen 64 scopeid 0x0<global>
inet6 fe80::a09b:20eb:6e61:72b8 prefixlen 64 scopeid 0x20<link>
inet6 2403:6200:89a6:96ee:33b5:37f2:4af1:bcbb prefixlen 64 scopeid 0x0<global>
ether d8:5e:d3:01:84:ee txqueuelen 1000 (Ethernet)
RX packets 4578155424 bytes 397941134593 (397.9 GB)
RX errors 0 dropped 25613 overruns 0 frame 0
TX packets 9865356056 bytes 14456549029829 (14.4 TB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
но когда я делаю
ip rule show
я получаю эту ошибку
База данных /etc/iproute2/rt_tables повреждена на ip route add 192.168.0.0/24 dev enp7s0 src 192.168.0.101 table rt2
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Как я могу это исправить?
Может быть, я не настроил
/etc/network/interfaces
Согласно тому, что я нашел в гугле, я должен добавить эти строки
auto lo
iface lo inet loopback
allow-hotplug enp7s0
iface enp7s0 inet static
address 192.168.0.101
netmask 255.255.255.0
gateway 192.168.0.1
allow-hotplug enp8s0
iface enp8s0 inet static
address 192.168.1.16
netmask 255.255.255.0
Но этого больше не существует на Ubuntu 22.04, я слышал, что они перешли на
/etc/netplan
но единственный файл, который я там нашел, это
01-network-manager-all.yaml
внутри которого только
# Позволить NetworkManager управлять всеми устройствами в этой системе
network:
version: 2
renderer: NetworkManager
Решено с помощью
sudo ip route add 192.168.0.0/24 dev enp7s0 src 192.168.0.101 table rt2
sudo ip route add default via 192.168.0.1 dev enp7s0 table rt2
sudo ip rule add from 192.168.0.101/32 table rt2
sudo ip rule add to 192.168.0.101/32 table rt2
Ответ или решение
Для настройки маршрутизации с помощью iproute2 для двух сетевых интерфейсов в Ubuntu 22.04, необходимо выполнить несколько шагов. Этот процесс включает в себя конфигурацию маршрутов и правил маршрутизации для каждого интерфейса, чтобы они могли эффективно работать одновременно. Рассмотрим все необходимые шаги для решения данной задачи.
1. Понимание конфигурации сети
У вас имеются два сетевых интерфейса: enp7s0
и enp8s0
, каждый из которых подключен к своей сети с отдельными интернет-соединениями. Ваша цель — настроить интерфейс enp8s0
в качестве основного, а enp7s0
— как дополнительный, для маршрутизации трафика.
2. Настройка таблиц маршрутизации
Первым шагом является редактирование файла /etc/iproute2/rt_tables
, чтобы добавить новую таблицу маршрутизации. В вашем случае вы уже добавили строку:
1 rt2
Это правильно, поскольку вы создаете таблицу маршрутизации с именем rt2
. Убедитесь, что в этом файле нет других конфликтов и он выглядит корректно.
3. Настройка маршрутов
Для назначения маршрутов в вашу новую таблицу необходимо выполнить следующие команды:
sudo ip route add 192.168.0.0/24 dev enp7s0 src 192.168.0.101 table rt2
sudo ip route add default via 192.168.0.1 dev enp7s0 table rt2
Эти команды обозначают:
- В первую очередь, мы определяем диапазон адресов, который будет использоваться на
enp7s0
. - Далее задается умолчательный маршрут для выхода в интернет через шлюз
192.168.0.1
.
4. Настройка правил маршрутизации
После настройки маршрутов нужно добавить соответствующие правила для маршрутизации:
sudo ip rule add from 192.168.0.101/32 table rt2
sudo ip rule add to 192.168.0.101/32 table rt2
Эти команды обеспечивают, что пакеты, отправляемые с IP-адреса 192.168.0.101
(интерфейс enp7s0
), будут маршрутизироваться через таблицу rt2
.
5. Проверка конфигурации
Для проверки того, что маршруты и правила были добавлены корректно, используйте следующие команды:
ip route show table rt2
ip rule show
Убедитесь, что вывод показывает добавленные вами маршруты и правила.
6. Настройка сетевых интерфейсов
С учетом того, что вы используете Ubuntu 22.04, рекомендуется использовать netplan
для управления сетевыми интерфейсами. Если файл /etc/netplan/01-network-manager-all.yaml
уже существует, добавьте конфигурацию для вашего сетевого интерфейса в этот файл. Он может выглядеть, например, следующим образом:
network:
version: 2
ethernets:
enp7s0:
dhcp4: no
addresses: [192.168.0.101/24]
gateway4: 192.168.0.1
enp8s0:
dhcp4: no
addresses: [192.168.1.16/24]
После внесения изменений примените конфигурацию:
sudo netplan apply
7. Заключительные шаги
Важно убедиться, что маршрутизация работает так, как задумано. Проверьте соединение с Интернетом через оба интерфейса, а также удостоверьтесь, что в вашем случае не возникает конфликтов с маршрутами. Используйте команды ping
и traceroute
для тестирования соединений.
Заключение
Настройка маршрутизации с использованием iproute2 на Ubuntu 22.04 является гибким и мощным решением для работы с несколькими сетевыми интерфейсами. Убедитесь, что каждый шаг был выполнен корректно, чтобы избежать проблем с маршрутизацией. Если вы столкнетесь с какими-либо ошибками, используйте команду ip rule show
для диагностики и исправления конфигурации.