В Linux и Unix для каждой таблицы маршрутизации может быть только один шлюз. В Linux у вас может быть несколько таблиц маршрутизации, но у каждой есть один шлюз.
В Linux это определяется следующим образом:
> ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
Ключевая строка начинается со default
и гласит, что (мой) шлюз - 192.168.73.1
. Вы меняете это следующим образом:
> ip route del default
> ip route add default via 192.168.73.1 dev eth0
Если у меня подключено более одного интерфейса, моя таблица маршрутизации будет выглядеть так:
> ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
192.168.73.0/24 dev wlan0 proto kernel scope link src 192.168.73.66 metric 9
Как вы можете видеть, локальный трафик может проходить через eth0
или wlan0
, но, благодаря меньшему значению metric
(1 против 9), будет маршрутизироваться через eth0
.
WAN трафик будет , безусловно , пройти через eth0
, потому что шлюз по умолчанию на dev eth0
Эти значения автоматически поддерживаются вашим network manager
который по умолчанию предпочитает кабельные соединения Wi-Fi. Однако вы можете отменить его выбор с помощью команд, аналогичных предыдущим,
> ip route delete default
> ip route add default via 192.168.73.1 dev wlan0
Если у вас есть несколько интерфейсов одного типа (например, несколько соединений Ethernet), то приоритет отдается интерфейсу, который был подключен первым.
Шлюз по умолчанию идентифицируется, так сказать, самой сетью: это один из параметров, которые передаются на ваш компьютер при согласовании перехода DHCP (остальные - маска сети, сеть, широковещательный адрес). Вы не знаете об этом, потому что процесс DHCP обрабатывается для вас network-manager
. Иногда вам может потребоваться настроить статический IP-адрес, который не использует DHCP; в этом случае вам придется указать четыре параметра, упомянутых выше. Существуют методы изучения этих параметров даже в совершенно новых для вас сетях, но обычно вы устанавливаете статический адрес только в тех локальных сетях, которые вы уже хорошо знаете.
Помимо вашей локальной сети и маршрутов шлюза по умолчанию, вы можете иметь определенные маршруты через любой интерфейс. В этом случае порядок приоритетов маршрутов определяется на основе принципа наиболее конкретных маршрутов в первую очередь. Предположим, у вас есть маршрут для 1.1.1.0/24
через wlan0
. Затем, когда нам нужно направить пакеты, скажем, для 1.1.1.1
, применяются как это правило (через wlan0), так и правило по умолчанию (через eth0), но первый более конкретен, поэтому эти пакеты будут проходить через wlan0
. В этом случае шлюз dafult становится маршрутом, когда все остальное терпит неудачу, то есть, когда никакой другой маршрут не применяется.
В Linux у вас может быть несколько таблиц маршрутизации, это называется policy or source routing
. В этом случае вам также понадобится правило для ядра, чтобы различать, когда применять несколько таблиц маршрутизации в вашем распоряжении. Вы найдете краткое введение в политику маршрутизации здесь . В этом случае вышеприведенные команды остаются идентичными, за исключением того, что за ними следует имя таблицы маршрутизации, над которой вы хотите работать, например:
> ip route show table main
> ip route show table MyOtherRoutingTable
Вы часто найдете ссылки на такие команды, как netstat, route, ifconfig. В Linux (но не в Unix, прочитайте верхний комментарий ниже) они устарели. Текущая команда, ip из набора iproute2 , заменяет все эти и некоторые другие. Посмотрев в googling linux ip cheat sheet
вы можете найти сайты, сравнивающие возможности ip
и предыдущих утилит.
редактировать
В Unix приведенные выше команды будут такими: вы запрашиваете таблицу маршрутизации как
> netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.11.1 UGSc 10 0 en0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 2 161444 lo0
169.254 link#4 UCS 1 0 en0
169.254.10.9 10:c3:7b:9d:c8:78 UHLSW 0 0 en0
192.168.11 link#4 UCS 4 0 en0
192.168.11.1 10:6f:3f:25:c6:33 UHLWIir 11 4589 en0 1162
192.168.11.56 88:53:2e:10:77:5f UHLWI 0 0 en0 1187
192.168.11.65 2:f:b5:70:5b:22 UHLWI 0 0 en0 1081
192.168.11.67 127.0.0.1 UHS 0 0 lo0
192.168.11.113 6:20:3e:52:16:4d UHLWIi 2 278 en0 1188
Здесь шлюз идентифицируется ключевым словом по default
и флагом G
Вы меняете шлюз по умолчанию как:
> route delete default
> route add default 192.168.0.1
> route change default -interface enp0s3
Каждый комментарий остается тем же, за исключением того, что касается policy routing
, которая не поддерживается ядрами Unix.