Привязка к определенному сетевому интерфейсу на сервере Linux с несколькими шлюзами

207
Adam Gausmann

Я пытаюсь запустить серверную программу на своем локальном компьютере. Имеет 2 маршрута в интернет:

  • 10.0.0.1/24на eth0это шлюз и подсеть на интерфейсе с быстрым соединением; однако брандмауэр не позволяет мне получить доступ к любым серверам, связанным с портами TCP.
  • 10.8.0.1/24на eth1это шлюз и подсеть на более медленном интерфейсе; тем не менее, я управляю устройством шлюза и могу успешно перенести порт через него, и сервер виден в Интернете.

На моей машине у меня есть следующие маршруты:

default via 10.0.0.1 dev eth0 src 10.0.0.x metric 203 default via 10.8.0.1 dev eth1 metric 800 10.8.0.0/24 dev eth1 proto kernel scope link src 10.8.0.y 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.x metric 203

Понятно, eth0что при обычных условиях маршрут через будет иметь приоритет; однако, чтобы мой сервер был перенаправлен через порт, ему необходимо использовать шлюз по умолчанию на eth1интерфейсе без перенаправления всего остального трафика через тот же интерфейс.

До сих пор я пытался связать сервер с адресом, 10.8.0.yчто означает, что он будет принимать только те соединения, для которых этот IP-адрес назначен. Тем не менее, он не работал для маршрутизации трафика в обратном направлении. Я проверил, используя, tcpdump -i eth1 -p 25561что входящие соединения поступают, но при наблюдении как eth0и eth1я не вижу исходящий ответ. После этого на удаленном клиенте истечет время ожидания ответа.

Кто-нибудь еще пытался сделать что-то подобное и может дать некоторое представление о том, как мне нужно это настроить?

1
Обычно вам нужно использовать `ip route table` в сочетании с` ip rule` для связывания исходного IP с соответствующим маршрутом назначения. Взгляните на http://lartc.org/howto/lartc.rpdb.multiple-links.html. Представьте, что ваш локальный компьютер - это маршрутизатор linux, подключенный к провайдеру 1 и провайдеру 2, чтобы следовать приведенным там объяснениям. Затем вы даже можете использовать iptables, чтобы выбрать подходящего провайдера (например, выбрав правильный источник ip). A.B 6 лет назад 0
Также с использованием таблиц маршрутизации (как на странице lartc.org) я не думаю, что это вообще нужно, но, возможно, вы можете заставить это работать, просто отключив rp_filter (фильтрация обратного пути). Посмотрите на https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt (запись rp_filter). Отключите его как для `all`, так и для` eth1`. A.B 6 лет назад 0

0 ответов на вопрос