Я пытаюсь выбрать наиболее подходящую конфигурацию для моего сервера с двумя внешними интерфейсами, оба получают внешний IP-номер от интернет-провайдера через DHCP. Это позволяет мне размещать разные сервисы на разных IP-адресах. Адреса, скорее всего, будут находиться в одной и той же сети, что может вызвать головную боль при моей маршрутизации.
Самый простой сценарий - просто назначить различный приоритет каждому сетевому интерфейсу, имея один интерфейс в качестве "основного", к которому все маршрутизируется по умолчанию. Поскольку меня не интересует балансировка нагрузки или отработка отказа, это должно работать.
ifconfig em0 priority 0
ifconfig em2 priority 10
Я смоделировал сценарий с использованием локального сервера DHCP, и он, кажется, работает хорошо. Таблица маршрутизации выглядит следующим образом после автоматической настройки через DHCP:
# route -n show -inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 10.0.0.1 UGS 0 0 - 8 em0
224/4 127.0.0.1 URS 0 0 32768 8 lo0
10.0.0/24 10.0.0.2 UCn 1 13 - 4 em0
10.0.0/24 10.0.0.3 UCn 0 0 - 14 em2
10.0.0.1 xx:xx:xx:xx:xx:01 UHLch 1 12 - 3 em0
10.0.0.2 xx:xx:xx:xx:xx:02 UHLl 0 0 - 1 em0
10.0.0.3 xx:xx:xx:xx:xx:03 UHLl 0 3 - 1 em2
10.0.0.255 10.0.0.2 UHPb 0 0 - 1 em0
10.0.0.255 10.0.0.3 UHPb 0 0 - 1 em2
127/8 127.0.0.1 UGRS 0 0 32768 8 lo0
127.0.0.1 127.0.0.1 UHhl 1 2 32768 1 lo0
Через мой шлюз есть только один выход по умолчанию, а конфликтующий маршрут 10.0.0/24
имеет разные приоритеты, поэтому следует использовать только один путь, если явно не запрошено.
Согласно всем моим тестам, это работает хорошо. Особенно:
- Службы на сервере, прослушивающие оба IP-адреса, могут быть доступны с использованием любого из них.
- Службы, прослушивающие один интерфейс, могут быть доступны только через этот интерфейс.
- При пинге хоста с сервера я могу выбрать исходящий интерфейс. Это работает как ожидалось.
Но я все еще волнуюсь, и у меня есть два вопроса, в частности:
Должен ли я удалить дополнительный маршрут к моей сети?
У меня есть два маршрута до 10.0.0/24
. Счетчик "Использовать" для последнего никогда не увеличивается, и моя сеть, кажется, работает, даже если я удаляю один для em2
.
10.0.0/24 10.0.0.2 UCn 1 13 - 4 em0
10.0.0/24 10.0.0.3 UCn 0 0 - 14 em2
Второй маршрут вообще необходим? Если нет, то приносит ли это вред?
Нужны ли две трансляции для одной сети?
Каждый интерфейс также настраивает свою собственную трансляцию в той же сети.
10.0.0.255 10.0.0.2 UHPb 0 0 - 1 em0
10.0.0.255 10.0.0.3 UHPb 0 0 - 1 em2
Здесь один и тот же вопрос: нужны ли они, а если нет, то вредны ли они? Я мог легко представить, что у каждого интерфейса должна быть запись в таблице, но я боюсь, что не знаю об этом достаточно. Я не вижу странных вещей, происходящих в моей локальной сети.
...Оставайтесь на линии
После запуска с этой настройкой сеть перестала работать. Проверяя логи, я вижу это:
arp: attempt to add entry for 10.0.0.1 on em0 by xx:xx:xx:xx:xx:xx on em2
arpresolve: 10.0.0.1: route contains no arp information
arpresolve: 10.0.0.1: route contains no arp information
arpresolve: 10.0.0.1: route contains no arp information
...
Видимо что-то в настройке должно измениться. Я все еще не уверен, что.