Вот мой сценарий:
Есть 3 машины:
A
: в инете: есть ip (a.a.a.a
), имеет порт pa
открыто
B
: мой сервер / шлюз: есть ip (b.b.b.b
), имеет порт pb
открыто
C
: в инете: есть ip (c.c.c.c
), имеет порт pc
открыто
Владелец машины A
предлагает услугу через порт pa
который должен быть доступен на машине C
через порт pc
. Проблема в том, что владелец A
может разрешить только прямое соединение с моим сервером, машиной B
в порту pb
.
Обратите внимание, что, A
и C
находятся в Интернете, поэтому, по сути, я должен действовать как шлюз между двумя машинами в Интернете (литература, которую я нашел в большинстве документов по брандмауэру, касается работы в качестве шлюза между интернетом и вашим местным сеть).
Машина B
работает под управлением OpenSuse 11.4
Моя задача - убедиться, что я отдаю машину C
услуга, предлагаемая A
через мой сервер B
, таким образом, чтобы трафик из A:pa
заканчивается на C:pc
и трафик из C:pc
заканчивается на A:pa
.
Итак, как я могу этого добиться, скажем, используя iptables
или другая утилита Linux / Unix? Это вообще возможно?
Вот идея, которую я имею в виду, но не уверен, что она законна или имеет смысл:
iptables -t nat -A PREROUTING -p tcp --source a.a.a.a --source-port pa \
--destination b.b.b.b --destination-port pb -j DNAT --to-destination c.c.c.c:pc
и
iptables -t nat -A PREROUTING -p tcp --source c.c.c.c --source-port pc \
--destination b.b.b.b --destination-port pb -j DNAT --to-destination a.a.a.a:pa
Я предполагаю, что C подключается к A: pa (это не совсем понятно). Вам необходимо выполнить как DNAT, так и SNAT на B для этих подключений от C:
iptables -t nat -A PREROUTING -p tcp -s c.c.c.c -d b.b.b.b --dport pb -j DNAT --to-destination a.a.a.a:pa
iptables -t nat -A POSTROUTING -p tcp -d a.a.a.a --dport pa -j MASQUERADE