2008-04-16

Простой фокус с iptables

Есть у меня своя локальная сеть 192.168.0.0/24, есть провайдерская сеть 10.0.0.0/8
Есть DC++ Хаб в моей сети, путь будет 192.168.0.1, должен быть виден из 10.0.0.0/8
Есть шлюз из моей сети в провайдерскую
ну и наконец есть пользовательский компьютер (192.168.0.10) в моей сети, которому нужно работать с хабом в активном режиме.
мой IP в сети провайреда будет 10.0.0.1

Всю настройку будем проводить на шлюзе.
Проблем с видимостью из 10.0.0.0 моего хаба не возникает:

iptables -A PREROUTING -d 10.0.0.1 -p tcp --dport 411 \
-j DNAT --to 192.168.0.1


в пассивном режиме уже можно работать, цепляясь к хабу по внутреннему адресу. Можно убрать проверку IP из настроек хаба, и сообщать ему внешний (10.0.0.1) адрес. Но это костыль, и далеко не всегда работающий.
Лучше подменять адреса

#Маркируем пакет, чтобы не потерялся
iptables -t mangle -A PREROUTING -d 10.0.0.1 -p tcp --dport 411 \
-s 192.168.0.0/24 -j MARK --set-mark 1

# Подменяем маркированным пакетам адреса на нужные
iptables -t nat -A PREROUTING -m mark --mark 1 \
-j DNAT --to 192.168.0.1
iptables -t nat -A POSTROUTING -m mark --mark 1 \
-j SNAT --to 10.0.0.1


Вот и все, осталось только DNAT-ить порт данных для клиента:

iptables -A PREROUTING -d 10.0.0.1 -p tcp --dport 30005 \
-j DNAT --to 192.168.0.10

ЗЫ
Способ с маркировкой пакетов мне нравится больше, т.к. для сотворения аналогичных действ остальными сервисами остается только пометить пакет нужной меткой.

Комментариев нет: