Я хотел бы перенаправить весь трафик (конкретно 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.
Ссылка в нижней части вашего вопроса предназначена для людей, у которых несколько 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, а не фильтрует пакеты на пути через ваш хост.
.