Спрашивал об этом в сетевой инженерии при обмене стеком и был перенаправлен сюда.
У меня есть пара серверов с конфигурацией ниже
server1:
eno1: 127.15.0.1/16 scope global
eno2: 5.0.0.1/24
server2:
lo: 127.0.0.1/16 (it had /8. I changed the subnet mask using 'ip addr del 127.0.0.1/8 dev lo; ip addr add 127.0.0.1/16 dev lo')
eno2: 5.0.0.2/24
eno1 сервера server1 подключен к совершенно другой сети L2 и полностью изолирован.
Интерфейсы eno2 обоих серверов подключены к одной и той же сети L2. Теперь мне нужно получить доступ к 127.15.0.1 с server2.
Server1 был развернут давно, и у меня нет прав на изменение какой-либо конфигурации Я не знаю, почему кто-то использовал подсеть 127.xxx с глобальной областью действия.Не уверен, что это верная конфигурация, но мне приходится с ней жить. У меня есть полный контроль над server2, и я могу все изменить.
Оба сервера основаны на Linux.
связь между 5.0.0.1 <-> 5.0.0.2 в порядке.
Моя первая попытка заключалась в том, чтобы добавить маршрут на server2, как показано ниже
ip r add 127.15.0.1/32 через 5.0.0.1 пингуется 127.15.0.1 с server2. Я вижу запросы ping и ответы в tcpdump на server2, но команда ping показывает 100% потерю.
Я отключил rp_filters
sysctl.cnf:
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.eno2.rp_filter=0
перезагрузился после обновления sysctl.conf
И я удалил iptables. (iptables -F)
Тот же результат. Я думаю, что server2 не любит использовать серию 127.x.x.x. Поэтому я добавил приведенное ниже правило на сервер 2
iptables -t nat -A OUTPUT -d 5.0.0.1 -j DNAT --to-destination 127.15.0.1
, это правило должно заменить целевой IP-адрес на 127.15.0.1, если пакет предназначен для 5.0.0.1.
отправил эхо-запрос 5.0.0.1 с server2. Iptables заменил IP-адрес назначения на 127.15.0.1 (подтвердил это на server1 tcpdump). Сервер1 ответил, но ответы снова отбрасываются.
К этому моменту у меня закончились идеи. Я отключил server1 для обслуживания и заменил 127.15.0.1/26 на 192.168.1.1/16. В этом случае подключение работало нормально (с iptables и без него). Теперь вопрос в том, что проблема связана с использованием 127.x.x.x? Если да, то есть ли выход ?? Если нет, что еще я могу попробовать?
Примечание: эта конфигурация работала раньше. Недавно мы потеряли server2 (на котором был старый Linux), и я строю его с нуля. Также Windows не позволяет использовать 127.x.x.x для интерфейсов, отличных от loopback. Не уверен, почему Linux позволяет это на интерфейсах, отличных от lo.может быть есть повод!
Подводя итог, у меня есть следующие вопросы:
Флаги sysctl Linux в
/sys/net/ipv4/conf/*/route_localnet
позволяют отключать разумную обработку таких пакетов.
route_localnet — BOOLEAN
Не рассматривать петлевые адреса как марсианский источник или пункт назначения при маршрутизации. Это позволяет использовать 127/8 для целей локальной маршрутизации. default FALSE
Поскольку немногие здравомыслящие люди когда-либо будут делать такие вещи, в наши дни это может работать, а может и не работать (последний раз я проверял это несколько лет назад).
Пожалуйста, назначьте любое зарезервированное для этой цели (возможно, локальное для ссылки, но не внутреннее на хосте) или собственное IP-пространство для рассматриваемых интерфейсов. Продолжение этой странной настройки только вызовет больше проблем, особенно когда существуют простые альтернативы.