Destination NAT при двух Интернет-подключениях.

Обсуждение ПО и его настройки
Ответить
Аватара пользователя
Barvinok
Сообщения: 98
Зарегистрирован: 28 фев 2012, 23:21

05 фев 2013, 11:57

Столкнулся с маленькой сложностью при проброросе порта в локалку.
У меня два интернет-подключения (ADSL через ZyXel и оптика через Mikrotik).
Внутри локалки есть некий веб-сервер, у которого в качестве шлюза по умолчанию прописано подключение 1 (ADSL). Я прекрасно подключаюсь к нему снаружи через это подключение.
Но подключиться через второе подключение (Mikrotik) я не могу - нужно обязательно изменить шлюз на веб-сервере, указав Mikrotik.
На Mikrotik сейчас правило такое:

Код: Выделить всё

chain=dstnat action=dst-nat to-addresses=192.168.10.1 to-ports=80 protocol=tcp dst-address=ххх.ххх.ххх.ххх dst-port=80

Причина понятна:
dst-nat - replaces destination address and/or port of an IP packet to values specified by to-addresses and to-ports parameters
Подменяется адрес получателя, но адрес источника (мой удалённый компьютер) сохраняется, а ответ идёт по маршруту с меньшим DISTANCE, т.е. через подключение 1 (ADSL).
Я хочу сделать так, что бы подменялся так же адрес источника, будто соединение происходит от внутреннего адреса Микротика.
Я попробовал

Код: Выделить всё

chain=srcnat action=src-nat to-addresses=192.168.10.1 to-ports=80 protocol=tcp dst-address=xxx.xxx.xxx.xxx dst-port=80
Не работает. Пробовал masquerade и netmap - тоже не завелось....
Подскажи, как правильно сделать?
Последний раз редактировалось Barvinok 19 фев 2013, 18:01, всего редактировалось 2 раза.


Аватара пользователя
Barvinok
Сообщения: 98
Зарегистрирован: 28 фев 2012, 23:21

06 фев 2013, 00:28

В очередной раз плотненько пройдясь по руководству iptables сам же и отвечаю.
Данная задача решается двумя правилами. Сначала подменяем адрес получателя:

Код: Выделить всё

chain=dstnat action=dst-nat to-addresses=192.168.10.1 to-ports=80 protocol=tcp dst-address=xxx.xxx.xxx.xxx dst-port=80

Затем пакет пройдя по цепочке Forward попадает в цепочку Postrouting, где мы меняем ему адрес источника (на адрес внутреннего интерфейса Mikrotik):

Код: Выделить всё

chain=srcnat action=src-nat to-addresses=192.168.10.2 protocol=tcp dst-address=192.168.10.1 dst-port=80
В данном случае, dst-address и dst-port служат лишь приметами, по которым вычисляются пакеты, в которых необходимо заменить адрес источника. Я сначала сомневался, будет ли это работать, хотел помечать в первом правиле с помощью mangle... Но потом решил попробовать.
Работает!

К слову сказать, так же двумя правилами и командой mapping можно было опубликовать в интернет весь хост. Но мне то нужен был лишь один порт.


Ответить