У меня такая конфигурация:
vlan123@eth0 - range 1.2.3.0/24, with 1.2.3.4 assigned to it
br2000 - range 10.2.3.0/24
в ip route
Я вижу:
10.2.3.0/24 dev br2000 proto kernel scope link src 10.2.3.1
В iptables я переписываю назначение входящих пакетов (таблица nat
):
-A PREROUTING -d 1.2.3.4/32 -j DNAT --to-destination 10.2.3.4
Если я попытаюсь пропинговать адрес 1.2.3.4
К сожалению, я не получил пересылки, на которую рассчитывал. ip route get 10.2.3.4 from 2.3.4.5 iif vlan123
возвращает:
RTNETLINK answers: Invalid cross-device link
Что, кажется, подтверждает, что правильной маршрутизации нет. В чем может быть проблема?
Переадресация IP включена в sysctl, и я также отключил rp_filter для тестирования.
Если вы хотите переписать входящие пакеты, вам следует добавить правила в цепочку PREROUTING; Цепочка OUTPUT в правилах nat используется только для локально сгенерированных пакетов.
Обновление 1:
После того, как вы установите это в таблице PREROUTING, убедитесь, что целевой хост (10.2.3.4) действительно имеет 10.2.3.1 в качестве шлюза по умолчанию, иначе ответ никогда не достигнет источника.
Также добавьте правило регистрации в цепочку FORWARD, чтобы увидеть, действительно ли ваш пакет переписан правильно и отправлен на целевой хост.