Насколько я знаю, базовая конфигурация сети идет в /etc/network/interfaces
и система генерирует таблицу маршрутизации из этой информации. Меня также учили, что в общем /etc/network/interfaces
это место для постоянного добавления пользовательских команд для управления таблицей маршрутизации (иногда также предлагается /etc/rc.local
или пользовательский скрипт в /etc/network/if-up.d/
). Кроме того, можно указать пользовательские таблицы маршрутизации в /etc/iproute2/rt_tables
.
- Есть ли еще какие-либо места, которые повлияют на (основную) таблицу маршрутизации?
- В частности, есть ли другие возможности, кроме как
/etc/network/interfaces
сделать вручную добавленные/удаленные маршруты постоянными?
- В частности, есть ли другие возможности, кроме как
- Имеет ли система с несколькими сетевыми картами концепциюначальныйивторичные сетевые интерфейсыили эти формулировки используются только для помощи пользователю? (Во время настройки необходимо выбрать основной if и
/etc/network/interfaces
будет содержать соответствующий комментарий.) Если такая концепция существует, где ее можно настроить? - Есть ли различия в концепции таблицы маршрутизации между Debian Squeeze и Debian Jessie?
Предыстория моего вопроса в том, что у меня есть устаревшая система Debian Squeeze и новая система Debian Jessie, которые загружаются с разными таблицами маршрутизации, но (насколько я могу судить) настроены одинаково. Я мог бы вручную изменять таблицу маршрутизации в соответствии со своими потребностями и сделать изменения постоянными, /etc/network/interfaces
но я хочу понять, что происходит.
РЕДАКТИРОВАТЬ
Вот файлы конфигурации обеих машин. Я изменил первые части каждого IP-адреса из соображений конфиденциальности. Однако подсети и адресные части соответствующих сетей не были изменены. Каталог /etc/network/interfaces.d/
на машине Jessie пуст.
/etc/iproute2/rt_tables
на Джесси
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
/etc/iproute2/rt_tables
на сжатие
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
/etc/rc.local
на Джесси
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
/etc/rc.local
на сжатие
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
/etc/network/interfaces
на Джесси
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 143.103.155.254
netmask 255.255.255.0
network 143.103.155.0
gateway 143.103.155.254
# The primary network interface
auto eth2
iface eth2 inet static
address 27.126.19.194
netmask 255.255.255.248
network 27.126.19.192
broadcast 27.126.19.199
gateway 27.126.19.193
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 143.103.5.1
dns-search subdomain.domain.de
/etc/network/interfaces
на сжатие
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 143.103.155.254
netmask 255.255.255.0
network 143.103.155.0
gateway 143.103.155.254
auto eth2
iface eth2 inet static
address 27.126.19.194
netmask 255.255.255.248
network 27.126.19.192
broadcast 27.126.19.199
gateway 27.126.19.193
выход ip route show table main
на Джесси
default via 143.103.155.254 dev eth1
143.103.155.0/24 dev eth1 proto kernel scope link src 143.103.155.254
27.126.19.192/29 dev eth2 proto kernel scope link src 27.126.19.194
выход ip route show table main
на Squeeze
27.126.19.192/29 dev eth2 proto kernel scope link src 27.126.19.194
143.103.155.0/24 dev eth0 proto kernel scope link src 143.103.155.254
default via 27.126.19.193 dev eth2
default via 143.103.155.254 dev eth0 scope link
выход route -n
на Джесси
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 143.103.155.254 0.0.0.0 UG 0 0 0 eth1
143.103.155.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
27.126.19.192 0.0.0.0 255.255.255.248 U 0 0 0 eth2
выход route -n
на Squeeze
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
27.126.19.192 0.0.0.0 255.255.255.248 U 0 0 0 eth2
143.103.155.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 27.126.19.193 0.0.0.0 UG 0 0 0 eth2
0.0.0.0 143.103.155.254 0.0.0.0 UG 0 0 0 eth0
решение1
Оба ваши/etc/сеть/интерфейсыфайлы содержат одну и ту же ошибку: шлюз по умолчанию указан дважды.
У вас может быть несколько шлюзов по умолчанию, только при очень особых обстоятельствах (без учета метрик): если у вас есть несколько таблиц маршрутизации, каждая из которых указана в файле/etc/iproute2/rt_tables, но каждая таблица маршрутизации должна иметьодинокийшлюз по умолчанию.
Вместо этого вы указываете один для каждого интерфейса вта же самая таблица основной. Итак, мы видим здесь небольшую разницу в реализацииiproute2пакет и как он реагирует на ошибки.
В случаеДжесси, он устанавливает первый упомянутый шлюз, 143.103.155.254, как единственный шлюз, просто потому, что он упомянут первым. Когда происходит объявление второго шлюза, 27.126.19.193, ничего не происходит, потому что оннетпредшествует
ip route del default
Squeeze, напротив, решает эту ошибку другим способом: он ограничиваетобъемвторого шлюза вссылка локальная. Для получения дополнительной информации ообъем, видетьруководство iproute2, в котором говорится:
ссылка на область действия --- адрес является локальной ссылкой, действителен только на этом устройстве.
Википедияговорится, что:
В компьютерной сети локальный адрес канала — это сетевой адрес, который действителен только для связи в пределах сегмента сети (канала) или широковещательного домена, к которому подключен хост.
Таким образом, диапазон (неточный синоним дляобъем) второго шлюза был очень ограничен его сетевым сегментом (то есть, его широковещательный домен 143.103.155.0/24). Таким образом, Джесси тоже, но другим способом, справилась с вашим неверным объявлением нескольких шлюзов в одной и той же таблице маршрутизации.
Конечно, нетожидаемое поведениео том, как пакеты справляются с ошибками. Правильный способ для вас настроить свой/etc/сеть/интерфейсыфайл должен опустить оператор
gateway 143.103.155.254
в целом (это странно еще и потому, что там говорится, что шлюз вашего собственного ПК — это ... он сам!). Чтобы увидеть хорошее объяснение этого, прочтитеНачальный абзац решения здесь; далее также объясняется, как добавить несколько шлюзов с несколькими таблицами маршрутизации.
Если, как вы утверждаете,
Я могу попробовать еще раз, чтобы проверить, но я почти уверен, что уже пробовал это, но так и не смог подключиться ни к одному внешнему IP-адресу.
скорее всего, это связано с тем, что вы не разрешили пересылку IPv4 с одного интерфейса на другой (как sudo:
echo 1 > /proc/sys/net/ipv4/ip_forward
позаботится об этом), или потому что ваши правила iptables заблокировали пересылку.
решение2
Главное отличие Squeeze от Jessie в том, что ip
команда требует ifconfig
и первого, и iproute2
последнего.
ifconfig не знает конфигурации нескольких шлюзов, по крайней мере без метрик. Вот почему вы видите различия между двумя ip route
командами (или route -n
(устарело))
iproute2 может отслеживать несколько таблиц маршрутизации
ip route show all
Понятие первичного и вторичного сетевых интерфейсов — это всего лишь способ их различения, обычно их называют eth0 (первый) и eth1 (второй), но порядок может отличаться!
И да, вы можете установить постоянный маршрут с /etc/network/interfaces
помощью up
следующего:
up ip route add 1.2.3.4/24 via 1.2.3.1