4

В Linux возможно ли направлять все запросы к определенному IP-адресу для маршрутизации через виртуальный интерфейс, чтобы на другом конце они отображались с другим IP-адресом, который является основным узлом? Предположим, что у eth0 есть IP-адрес 1.1.1.1, а у eth0:1 есть адрес 1.1.1.2. Как сделать так, чтобы все запросы к 1.2.3.4 выглядели как поступающие от eth0:1? Я пытаюсь следующее, но это не похоже на работу:

route add 1.2.3.4 dev eth0:1

2 ответа2

5

Да.

Один из способов сделать это - использовать IPTABLES для перезаписи пакетов, оставляющих машину с несколькими IP-адресами, чтобы сказать, что они поступают из виртуального интерфейса. Пытаться

/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP

(Конечно, вам нужно настроить виртуальный IP-адрес так, как вы предполагали, то есть необходимо наличие eth0:1 или эквивалентного ему, чтобы трафик мог попасть обратно на компьютер)

1

Может понадобиться использовать команду

ip route add 1.2.3.4 dev eth0:1 src 1.1.1.2

или маршрут с аналогичной опцией. Если это не работает должным образом, вам может потребоваться расширенная маршрутизация: создайте дополнительную таблицу маршрутизации для этой цели в /etc /iproute2 /rt_tables, поместите вышеуказанную запись как единственную в эту таблицу и активируйте эту таблицу:

ip rule add to 1.2.3.4 priority 100 table to__1_2_3_4
ip route flush cache

Отчаянным последним решением будет netfilter: вы можете использовать SNAT с iptables в цепочке POSTROUTING, чтобы переписать адрес источника для пакетов к этому месту назначения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .