Я пытаюсь использовать shorewall на Arch для управления установкой с 2 локальными сетями и 2 подключениями к ISP. В конечном итоге я хочу, чтобы трафик из локальной сети 1 (192.168.1.0/24 interface enp5s0) использовал ISP 1 (76. ... interface enp6s0), а трафик из локальной сети 2 (192.168.0.0/24 interface enp7s0) использовал ISP 2 (99. ... interface enp3s0). В настоящее время я могу заставить работать один или другой, но не оба, в зависимости от того, какой маршрут по умолчанию будет первым:
output of `ip route ls` with sensitive information redacted:
default via 76.[rd].1 dev enp6s0 src 76.[rd].78 metric 203 mtu 576
default via 99.[rd].1 dev enp3s0 src 99.[rd].190 metric 205
76.[rd].0/24 dev enp6s0 proto kernel scope link src 76.[rd].78 metric 203 mtu 576
76.[rd].78 dev enp6s0 scope link src 76.[rd].78
99.194.48.0/21 dev enp3s0 proto kernel scope link src 99.[rd].190 metric 205
99.[rd].190 dev enp3s0 scope link src 99.[rd].190
192.168.0.0/24 dev enp7s0 proto kernel scope link src 192.168.0.1 metric 204
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.1 metric 202
С вышеприведенным выводом локальный 1 сможет достичь внешнего мира, но локальный 2 не сможет. И наоборот, если бы первая строка исчезла. Я почти уверен, что множественные маршруты по умолчанию — это табу, даже с несколькими провайдерами, но вот как это сделал shorewall.
Поскольку нигде не было примера для этого, я взял за основу пример shorewall с тремя интерфейсами. Чтобы не делать этот пост безумно длинным, вот ссылки на вставки каждой соответствующей конфигурации shorewall:
- интерфейсы:http://pastebin.com/u7w3YJdx
- увечье:http://pastebin.com/1X2hrLCZ
- маска:http://pastebin.com/bi9EEtwD
- политика:http://pastebin.com/mBBZQ0wg
- правила:http://pastebin.com/ySSLpMWd
- поставщики:http://pastebin.com/YjDfKZzg
- зоны:http://pastebin.com/XVgYz3dn
Страницы Shorewall по этому вопросу бесполезны, поскольку цель в их примере сильно отличается от моей цели. Любые указания в правильном направлении были бы весьма признательны.
решение1
Убедитесь, что вы не установили шлюз по умолчанию в файлах netctl или в других файлах. Если вы используете DHCP для получения IP-адресов, убедитесь, что вы отключили получение шлюза по умолчанию (dhcpcd -G). Запуск "ip route ls" долженне показывать шлюзы по умолчанию. Только "ip route show table all" выведет список шлюзов по умолчанию для каждой таблицы ISP. Что-то вроде этого:
default via 10.1.1.1 dev enp3s0 table ITC1 src 10.1.1.10
10.1.1.1 dev enp3s0 table ITC1 scope link src 10.1.1.10
default via 10.1.2.1 dev enp4s0 table ITC2 src 10.1.2.10
10.1.2.1 dev enp4s0 table ITC2 scope link src 10.1.2.10
default via X.X.X.X dev enp5s0 table MPLS src X.X.X.X
X.X.X.X dev enp5s0 table MPLS scope link src X.X.X.X
default table balance
nexthop via X.X.X.X dev enp5s0 weight 1
nexthop via 10.1.1.1 dev enp3s0 weight 2
nexthop via 10.1.2.1 dev enp4s0 weight 2
Также вы можете удалить записи из файла mangle, так как записей rtrules должно быть достаточно для того, что вам нужно.