Вопрос или проблема
Я пытаюсь настроить два Ethernet-соединения на одном компьютере с Ubuntu, но все попытки, которые я предпринял, не позволяют мне включить оба Ethernet-соединения одновременно, и я не понимаю, почему. Чтобы лучше понять, что я хочу сделать, вот описание трех вовлеченных компьютеров, представленных на следующем изображении:
- Компьютер A: мой личный компьютер (на Windows), который подключен к интернету
- Компьютер B: компьютер на Ubuntu 22.04, подключенный через Ethernet к интернету и к компьютеру C
- Компьютер C: сервер Ubuntu 22.04, который подключен только к компьютеру B через Ethernet
Я хочу получить доступ к компьютеру C с компьютера A по SSH.
Я уже настроил статические IP-адреса на компьютерах B и C:
- На компьютере B: xx.yy.zz.101 для Ethernet-порта, связанного с Ethernet-портом компьютера C
- На компьютере B: xx.yy.zz.100 для Ethernet-порта, подключенного к интернету
- На компьютере C: xx.yy.zz.102 для Ethernet-порта, связанного с Ethernet-портом компьютера B
Таким образом, я должен иметь возможность сначала подключиться с компьютера A к компьютеру B с помощью команды:
ssh xx.yy.zz.100
а затем с компьютера B к C с помощью команды:
ssh xx.yy.zz.102
Тем не менее, я могу установить только одно из двух подключений (в зависимости от того, какое активно). Файл конфигурации netplan компьютера B выглядит так:
---
network:
version: 2
ethernets:
enp35s0: # Соединение с компьютером C
dhcp4: false
addresses: [xx.yy.zz.101/24] # Необходима настройка статического IP
gateway4: xx.yy.zz.1
enp42s0: # Соединение с интернетом
dhcp4: false
addresses: [xx.yy.zz.100/24] # Необходима настройка статического IP
gateway4: xx.yy.zz.1
nameservers:
- addresses: [a.b.c.d, e.f.g.h]
и команда “ip a” показывает:
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: enp35s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:13:3b:0f:8f:36 brd ff:ff:ff:ff:ff:ff
inet 10.102.100.101/24 brd 10.102.100.255 scope global enp35s0
valid_lft forever preferred_lft forever
inet6 fe80::213:3bff:fe0f:8f36/64 scope link
valid_lft forever preferred_lft forever
3: enp36s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:13:3b:0f:8f:37 brd ff:ff:ff:ff:ff:ff
4: enp42s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 2c:f0:5d:9a:e0:2c brd ff:ff:ff:ff:ff:ff
inet 10.102.100.100/24 brd 10.102.100.255 scope global enp42s0
valid_lft forever preferred_lft forever
inet6 fe80::2ef0:5dff:fe9a:e02c/64 scope link
valid_lft forever preferred_lft forever
Можете ли Вы помочь мне понять, почему два Ethernet-интерфейса не могут использоваться одновременно? Я уже попытался несколько вариантов, например, использовал параметр маршрутов с некоторым приоритетом, но мне никогда не удавалось сделать то, что я хочу, поэтому я не знаю, какой простой способ сделать то, что я хочу.
Я делаю это все время, и это прекрасно работает.
Ваша проблема в gateway4
. У одного компьютера может быть не более одного шлюза для нормальной работы. В противном случае он не будет знать, куда отправлять трафик с “другими IP-адресами” (кроме прямой доступной локальной сети).
Так что закомментируйте или удалите второй gateway4
. Оставьте только тот, который идет в интернет.
network:
version: 2
ethernets:
enp35s0: # Соединение с компьютером C
dhcp4: false
addresses: [xx.yy.zz.101/24] # Необходима настройка статического IP
#gateway4: xx.yy.zz.1 -- УДАЛИТЕ ЭТО
enp42s0: # Соединение с интернетом
dhcp4: false
addresses: [xx.yy.zz.100/24] # Необходима настройка статического IP
gateway4: xx.yy.zz.1
nameservers:
- addresses: [a.b.c.d, e.f.g.h]
Обратите внимание, что у вас будет настроен gateway4
на компьютере C. Вам просто не нужен он на компьютере B, потому что отправка трафика в C с B, когда он предназначен для интернета, не сработает.
Итак, вывод команды ip a показывает интерфейсы enp35s0
и enp36s0
. Вы пытаетесь настроить enp35s0
и enp42s0
. Дублирование использования gateway4
— это следующая проблема. Используйте gateway4
только один раз и используйте выделенные маршруты.
Спасибо за ваш ответ! Удаление шлюза для первого интерфейса И добавление строки “renderer: NetworkManager” на том же уровне отступа, что и “version: 2”, решает мою проблему.
Конфигурационный файл теперь выглядит так:
network:
version: 2
renderer: NetworkManager
ethernets:
enp35s0: # Соединение с компьютером C
dhcp4: false
addresses: [xx.yy.100.101/24] # Необходима настройка статического IP
enp42s0: # Соединение с интернетом
dhcp4: false
addresses: [xx.yy.100.100/24] # Необходима настройка статического IP
gateway4: xx.yy.100.1
nameservers:
- addresses: [a.b.c.d, e.f.g.h]
Теперь я могу подключаться с компьютера A к C через B. Тем не менее, очень странно, что теперь я могу получить доступ к B только по Wi-Fi, а не по Ethernet (время подключения истекло). Также я не могу пинговать компьютер B с A, если использую Ethernet-соединение.
Когда я сбрасываю сетевую конфигурацию компьютера B, я могу получить доступ как по Wi-Fi, так и по Ethernet, так что это связано с текущей конфигурацией netplan. Я пытался найти ответ, но у меня по-прежнему эта проблема. У вас есть идея?
IP-конфигурация моего ноутбука (компьютера A) выглядит так:
Беспроводная сеть Wi-Fi:
Собственный DNS-суффикс соединения. . . : -------------
Адрес IPv6 локальной связи. . . . .: -------------
Адрес IPv4. . . . . . . . . . . . . .: xx.yy.80.204
Маска подсети. . . . . . . . . . . . : 255.255.248.0
Шлюз по умолчанию. . . . . . . . . : xx.yy.80.1
Ethernet-кабель Ethernet:
Собственный DNS-суффикс соединения. . . : -------------
Адрес IPv6 локальной связи. . . . .: -------------
Адрес IPv4. . . . . . . . . . . . . .: xx.yy.100.27
Маска подсети. . . . . . . . . . . . : 255.255.255.0
Шлюз по умолчанию. . . . . . . . . : xx.yy.100.1
Ответ или решение
Чтобы настроить два Ethernet-интерфейса на Ubuntu 22.04 и обеспечить правильность их конфигурации, следуйте приведённым ниже шагам. Это позволит вам одновременно использовать оба соединения, одно из которых подключено к интернету, а другое – к другому компьютеру в локальной сети.
Шаг 1. Проверка конфигурации сетевых интерфейсов
Прежде чем вносить изменения, проверьте текущее состояние сетевых интерфейсов с помощью команды:
ip a
Убедитесь, что оба интерфейса (enp35s0
и enp42s0
) отображаются корректно. Например:
enp35s0
– подключение к компьютеру Cenp42s0
– подключение к интернету
Шаг 2. Настройка файла netplan
Откройте файл конфигурации netplan, который обычно находится в /etc/netplan/
. Для редактирования воспользуйтесь текстовым редактором, например:
sudo nano /etc/netplan/01-netcfg.yaml
Пример правильной конфигурации должен выглядеть следующим образом:
network:
version: 2
renderer: NetworkManager
ethernets:
enp35s0: # Подключение к компьютеру C
dhcp4: false
addresses: [xx.yy.zz.101/24]
enp42s0: # Подключение к интернету
dhcp4: false
addresses: [xx.yy.zz.100/24]
gateway4: xx.yy.zz.1
nameservers:
addresses: [a.b.c.d, e.f.g.h]
Объяснение конфигурации:
- renderer: NetworkManager: Добавление этой строки позволяет NetworkManager управлять сетевыми интерфейсами.
- **`,
`gateway4`**: Указывайте только один шлюз на интерфейсе, который подключается к интернету. Другой интерфейс не должен иметь настроенный шлюз, чтобы избежать конфликтов.
- addresses: Убедитесь, что статические IP-адреса настроены корректно и соответствуют вашей схеме сети.
Шаг 3. Применение конфигурации
Сохраните изменения в файле и выйдите из редактора. Примените новую конфигурацию с помощью следующей команды:
sudo netplan apply
Шаг 4. Проверка соединений
Проверьте заново состояние сетевых интерфейсов:
ip a
Теперь оба интерфейса должны быть активны и не иметь конфликтов. Для проверки, сможете ли вы соединиться с компьютером C через SSH, выполните:
ssh xx.yy.zz.102
Шаг 5. Устранение проблем с подключениями
Если у вас возникают проблемы с подключением к интернету или другим компьютерам, проверьте следующее:
-
Файрвол: Убедитесь, что настройки файрвола на компьютере B не блокируют входящие подключения. Используйте команды для управления
ufw
:sudo ufw allow from xx.yy.zz.204 to any port 22
-
Настройка маршрутизации: Убедитесь, что маршруты настроены правильно. Выполните команду:
ip route
Должен выглядеть примерно так:
default via xx.yy.zz.1 dev enp42s0 xx.yy.zz.0/24 dev enp42s0 proto kernel scope link src xx.yy.zz.100 xx.yy.zz.0/24 dev enp35s0 proto kernel scope link src xx.yy.zz.101
-
Тестирование соединений: Проверьте, можете ли вы пинговать интерфейсы:
ping -c 4 xx.yy.zz.100 # Пинг до интерфейса к интернету ping -c 4 xx.yy.zz.102 # Пинг до компьютера C
Заключение
Следуя данным инструкциям, вы сможете правильно настроить два Ethernet-интерфейса на Ubuntu 22.04 и обеспечить доступ к компьютеру C из сети. В случае возникновения дополнительных проблем, проверьте настройки интерфейсов и маршрутизации, а также убедитесь, что все подключения не блокируются сетевыми фильтрами.