По какой-то причине мой Centos 5.9 Linux 2.6.18 x86_64 хочет, чтобы у меня было два маршрута по умолчанию.
Всякий раз, когда я перезагружаю сервер, моя таблица маршрутизации выглядит так:
[root@server1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
255.255.255.255 0.0.0.0 255.255.255.255 UH 0 0 0 bond0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 bond1
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 bond0
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 bond1
bond1 - это локальная сеть, поэтому наличие последнего маршрута по умолчанию, указывающего на эту сеть, приводит к сбою всех интернет-запросов.
Это легко исправить, выполнив route del default gw 192.168.0.254
и я мог бы добавить эту команду в какой-нибудь сценарий запуска. Однако я хотел бы понять, что происходит, и разобраться в корне проблемы.
Надеюсь, кто-нибудь мне скажет, почему это происходит. Мои исследования подтверждают, что всегда должен быть только один шлюз по умолчанию, но я не могу найти ответа на вопрос, почему их автоматически должно быть два.
Вот несколько файлов конфигурации:
[root@server1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=myhostname.com
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.10.11
NETMASK=255.255.255.0
NETWORK=192.168.10.0
BROADCAST=192.168.10.255
GATEWAY=192.168.10.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
IPADDR=192.168.0.15
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.254
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
Я понимаю, что замена bond0 и bond1 приведет к тому, что два маршрута по умолчанию также поменяются местами, что фактически предоставит мне доступ в Интернет при загрузке. Но я все равно считаю, что это не лучшее решение.
В Интернете люди говорят о файлах в /etc/sysconfig/network-scripts/route-X
, Но у меня их нет.
Спасибо за ваше время.
Маршруты "по умолчанию" устанавливаются на основе линий ШЛЮЗА в вашем ifcfg-<interface>
файлы. Как упомянул Дом в своем комментарии, если вы удалите неправильную строку GATEWAY, ваша таблица маршрутизации будет такой, как вы ожидаете.
Есть разница между GW и Default GW. Исходя из вашей конфигурации, похоже, вы хотите, чтобы оба интерфейса имели доступ к внешним сетям. Вы можете удалить линию GATEWAY, как было рекомендовано, но это предотвратит любую внешнюю связь с bond1.
Как только вы переходите на многосетевой, я считаю, что лучше использовать маршрутизацию на основе политик. Также известна как маршрутизация с разделенным доступом. Это хорошая привычка, которая требуется, когда вы хотите разместить несколько интерфейсов в одной подсети.
В частности, для вашего случая я бы:
/etc/iproute2/rt_tables
100 bond0tbl
101 bond1tbl
Теперь вы определили свои внутренние таблицы с именами bond0tbl и bond1tbl соответственно. Теперь вам нужно создать правила для этих таблиц.
/etc/sysconfig/network-scripts/rule-bond0
from 192.168.10.11 table bond0tbl
/etc/sysconfig/network-scripts/rule-bond1
from 192.168.0.15 table bond1tbl
Теперь, когда вы определили правила, пришло время определить маршруты.
/etc/sysconfig/network-scripts/route-bond0
/etc/sysconfig/network-scripts/rule-bond1
Наконец, я бы удалил строку GATEWAY из ОБОИХ файлов ifcfg-devX и добавил ее в /etc/syconfig/network
.
Легко запутаться в GW, который конкретный интерфейс должен использовать для маршрутизации, и в GW по умолчанию, который должен использовать ВСЕ ... в случае, если желаемый маршрут не существует. Установка его в /etc/sysconfig/network
всегда казался мне более «глобальным».
Когда твои утки все в ряд, ты service network restart
или ifup/ifdown
или reboot
чтобы все было создано. Чтобы узнать, сработало ли это, вы можете:
ip route show table bond0tbl
ip route show table bond1tbl
ip route show table main
ip rule show
Напомним,
Поместите эти строки в свой файл / etc / sysconfig / network, если вы хотите использовать bond0 в качестве шлюза по умолчанию. Если вы хотите использовать bond1 в качестве шлюза по умолчанию, укажите GATEWAYDEV = bond1.
NETWORKING=yes
HOSTNAME=mydbserver
GATEWAYDEV=bond0
GATEWAY=192.168.xxx.xxx