Перенаправьте весь трафик от нескольких интерфейсов до единственного IP

Я хотел бы перенаправить весь трафик (конкретно TCP & UDP) от нескольких интерфейсов глобальной сети (ppp0, ppp1, ppp2) к единственному IP от eth0.
Когда дело доходит до интерфейса к IP я могу использовать PREROUTING и POSTROUTING и изменить место назначения и исходный IP соответственно.
Но в этом случае (с несколькими интерфейсами), как я могу сказать который IP использовать в качестве исходного IP в POSTROUTING?

Так дюйм/с ppp0-ppp3 изменяются, и eth0 остается "192.168.1.5".
Я хотел бы передать трафик к IP: "192.168.1.10".

Например (только для TCP), я направил бы входящие соединения с использованием eth0:

iptables -t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 192.168.1.10:5000
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 5000 -j SNAT --to-source 192.168.1.5`

Но с несколькими интерфейсами (дюйм/с) я не знаю, как установить правило POSTROUTING к источнику, остается тем же?
Таким образом, вопрос - я, как предполагается, использую iptables методы для "сохранения" того IP и, чем использование он как источник, или существует иначе для того, чтобы сделать это?
Я нашел ссылку, которая похожа на то, в чем я нуждаюсь, но я не могу выяснить, как реализовать ее: http://www.tldp.org/HOWTO/IP-Masquerade-HOWTO/multiple-ips.html.

Нижняя строка, мне нужна "демилитаризованная зона" от нескольких интерфейсов до единственного IP.

1
задан 11 December 2014 в 11:54
1 ответ

Ссылка в нижней части вашего вопроса предназначена для людей, у которых несколько IP-адресов выхода. Так как вы пытаетесь протолкнуть пакеты через eth0 (192.168.1.5) - у вас нет IP псевдонимов и у вас нет нескольких IP-адресов выхода, а есть только один IP.

Итак, допустим, ppp0 имеет ip-диапазон: 10.100.100.0/24, начальный пакет, соединяющийся с вашим хостом, будет выглядеть так:

 | SRC IP        | DST IP       |
 | 10.100.100.10 | 10.100.100.1 |

Ваше первое правило верно:

-t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 192.168.1.10:5000

Итак, всякий раз, когда машина за ppp0-ppp3 пытается связаться с вашим хостом (192.168.1.5) на порту 5000, пакеты будут перенаправляться на 192.168.1.10. Пакет будет выглядеть так:

 | SRC IP        | DST IP       |
 | 10.100.100.10 | 192.168.1.10 |

Теперь, вы маршрутизируете пакеты через ваш хост, поэтому вы должны включить IP переадресацию:

sysctl -w net.ipv4.ip_forward=1

Но, когда получатель (192.168.1.10) получит пакет, он увидит источник 10.100.100.10 и вернет пакет на его собственный шлюз по умолчанию. Что вы можете сделать, так это установить статические маршруты на 192.168.1.10, которые будут сообщать этому хосту, что пакеты исходят от 10.100.100.0/24 маршрутизируются через 192.168.1.5, что-то вроде:

ip route add 10.100.100.0/24 via 192.168.1.5

Таким образом, вам не нужно будет добавлять никаких правил POSTROUTING, потому что пункт назначения (192.168.1.10) будет автоматически знать, куда возвращать пакеты.

Но, если это решение по какой-то причине нежизнеспособно (или вам лично оно не нравится), то следующее, что я бы предложил, это использовать MASQUERADE на eth0:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

DNAT решение также, вероятно, будет работать. Просто убедитесь, что ваша цепочка FORWARD установлена в ACCEPT, а не фильтрует пакеты на пути через ваш хост.

.
0
ответ дан 4 December 2019 в 08:18

Теги

Похожие вопросы