Как установить маршрут по умолчанию с netplan, сервер Ubuntu 18.04, 2 NIC
У меня два NIC, оба контролируются по DHCP. У одного есть публичный IP, у второго приватный.
Оба интерфейса имеют статический IP-адрес, зарезервированный в DHCP, и оба интерфейса получают правильный IP-адрес, но иногда при перезагрузке сервера я не могу получить доступ из общего доступа, поскольку маршрут по умолчанию - из частного сетевого адаптера.
Как я могу установить это постоянно с помощью netplan?
Public NIC ens18 (IP: 213.133.xxx.xxx) Частный NIC ens19 (IP: 10.10.10.xxx)
Мой конфиг netplan:
network:
version: 2
renderer: networkd
ethernets:
ens18:
dhcp4: yes
dhcp6: no
nameservers:
addresses: [8.8.8.8,8.8.4.4]
ethernets:
ens19:
dhcp4: yes
dhcp6: no
2 ответа
Проблема заключается в том, что networkd вызовет обе сети, и у обеих будет установлен шлюз по умолчанию, и у обеих будет один и тот же показатель.
Netplan в настоящее время не позволяет вам пропустить настройку маршрута для одного интерфейса, но вы можете настроить networkd отдельно, чтобы сообщить ему об этом, основываясь на конфигурации, созданной netplan.
Я скопировал команды ниже. Здесь я предполагаю, что ens19 - это "вторичный" интерфейс, для которого вы не хотите устанавливать шлюз по умолчанию. Обратите внимание, что для успешного выполнения этого также необходимо выполнить перезагрузку с новым интерфейсом (или вы можете скопировать часть config, пропустите строку MACAddress= и т. д., чтобы она была достаточно универсальной, чтобы новый интерфейс соответствовал).
sudo cp /run/systemd/network/10-netplan-ens19.network /etc/systemd/network
sudo vi /etc/systemd/network/10-netplan-ens19.network
Затем добавьте под [DHCP]:
UseRoutes=false # if you don't want to apply any routes from DHCP
RouteMetric=200 # any number above 100 if you want the routes applied, but that they are less preferred.
Если у вас еще нет файла (т. Е. Вы еще не подключили интерфейс), вы можете скопировать содержимое другого набора интерфейсов для DHCP и удалить MACAddress=.
В общем случае файл должен выглядеть примерно так:
[Match]
Name=interfacename
[Network]
DHCP=ipv4
[DHCP]
UseMTU=true
RouteMetric=200 # or UseRoutes=false, as you prefer.
Для статических интерфейсов просто пропуск gateway4
(или же gateway6
) опция config заставляет netplan НЕ создавать маршрут по умолчанию для этого интерфейса. Затем, если вам нужна дополнительная маршрутизация с помощью routes
элемент (массив слов)
Для интерфейсов DHCP вы можете сделать:
dhcp4-overrides:
route-metric: 100
Просто увеличьте метрику для последующих интерфейсов, и все будет хорошо.
(См.: https://netplan.io/examples)
Чтобы остановить интерфейс DHCP в netplan
от установки маршрута по умолчанию, просто установите use-routes
в dhcp4-overrides
в false
,
eth2:
dhcp4: true
dhcp4-overrides:
use-routes: false
Также может быть лучше не редактировать /etc/netplan/50-cloud-init.yaml
прямо, но вместо этого:
- Измените источник на
/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
, - Бег
cloud-init clean -r
перезагрузить. (это распространяет изменения в конфигурации облака наnetplan
конфигурации)
Использование двух сетевых адаптеров - это хитрость. Я бы предпочел статическую конфигурацию и определил таблицу маршрутизации вот несколько советов:
- необходимо определить шлюзы каждой сетевой карты, если только они не используют один и тот же шлюз
- даже с несколькими шлюзами для некоторых систем (например, Ubuntu) разрешен только ОДИН стандартный шлюз по умолчанию (потребовалось некоторое время, чтобы изучить это), но есть некоторые дистрибутивы Linux, которые допускают несколько шлюзов по умолчанию
- всегда проверять входящие и исходящие пинги для / от каждой сетевой карты (ping -I google.com)
- если правильно подключены только некоторые диапазоны, возможно соединение между ними, но не с другими сетями (получение и отправка эхо-запросов по известным адресам, но неспособность пинговать 8.8.8.8
- ip r get 8.8.8.8 поможет понять, как система достигает и внешний адрес
- установить MAC-адрес для каждой сети, так как имя адаптера может измениться при перезагрузке
В приведенном ниже примере обратите внимание, что каждая сетевая карта имеет свой собственный шлюз, а eno2 имеет шлюз системы по умолчанию, если вы хотите иметь отказоустойчивое поведение, посмотрите на связывание интерфейсов или вручную через iproute2 (подробнее)
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [ 88.88.24.26/29, "8888.ffff:1:20::c02/64" ]
routes:
- to: 0.0.0.0/0
via: 88.88.24.25
metric: 40
table: 400
routing-policy:
- from: 88.88.24.26/29
table: 400
match:
macaddress: 0c:c4:7b:0b:7b:eb
set-name: mainInf
gateway6: "8888.ffff:1:20:0:0:0:1"
nameservers:
search: [ mydomain.com ]
addresses:
- 8.8.8.8
- 1.1.1.1
- "2606:4700:4700::1111"
eno2:
addresses: [ 88.88.51.44/29, "8888.ffff:1:20::fa02/64" ]
gateway4: 88.88.51.41
routes:
- to: 0.0.0.0/0
via: 88.88.51.41
metric: 40
table: 200
routing-policy:
- from: 88.88.51.41/29
table: 200
match:
macaddress: 0c:c4:7b:0b:7b:bb
set-name: support
gateway6: "8888.ffff:1:20:0:0:0:1"
nameservers:
search: [ mydomain.com ]
addresses:
- 8.8.8.8
- 1.1.1.1
- "2606:4700:4700::1111"
Я устанавливаю сервер Ubuntu Server 18.04.1 LTS
$ uname -a
Linux srv02 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
,
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
addresses: []
dhcp4: true
dhcp6: false
nameservers:
addresses:
- 10.99.0.1
search: []
version: 2
Нужно сменить IP
$ sudo nano /etc/netplan/50-cloud-init.yaml
network:
ethernets:
eth0:
addresses: [10.99.0.6/23]
gateway4: 10.99.0.5
dhcp4: false
dhcp6: false
nameservers:
addresses:
- 10.99.0.5
search: []
version: 2
$ sudo netplan apply
Invalid YAML at //etc/netplan/50-cloud-init.yaml line 9 column 0: found character that cannot start any token 9 column - addresses: [10.99.0.6/23]