Задать вопрос
@Konkase

Как натить ответы на tcp соединения?

Добрый день!

Есть схема Client->Server

192.168.55.55 - client
192.168.100.246 и 192.168.49.56 - server

Клиент общается к серверу на 192.168.100.246:tcp:5689, нужно завернуть так, чтобы сервер ответил клиенту подставляя source 192.168.49.56:tcp:5689.

В nat POSTROUTING натятся только новые соединения, для ответов на входящие пакеты нат не работает.

Не спрашивайте зачем. Нужно так.
  • Вопрос задан
  • 387 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Mystray
@Mystray
NOC
Очень топорное и рискующее отстрелить себе ногу решение: stateless nat (tc filter action nat) . В вашем случае вешать на интерфейс в сторону клиента. Ему плевать на состояние, на флаги tcp и на iptables, оно просто ставит один адрес вместо второго не всех пакетах, подпадающих под match.
Как-то так (не уверен насчет правильности аргументов, синтаксис tc страшен как ядерная война)
# tc qdisc add dev eth0 root handle 1: htb
# tc filter add dev eth0 \
protocol ip parent 1: prio 10 u32 \
match ip src 192.168.100.246/32 \
match ip protocol 6 0xff \
match ip sport 5689 0xffff \
action nat egress 192.168.100.246/32 192.168.49.56
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
ну можно через dnat завернуть запросы на другой адрес.

Только вы уверены, что клиент работать будет? Он то отправляет запрос на 192.168.100.246, и ответ от 192.168.49.56 его просто не интересует
Ответ написан
допустим 192.168.49.56 висит на eth1, 192.168.49.1 - шлюз к 192.168.55.55
iptables -t nat -A POSTROUTING -p tcp --sport 5689 -d 192.168.55.55 -o eth1 -j SNAT --to-source 192.168.49.56
ip ro add 192.168.55.55/32 via 192.168.49.1 dev eth1

здесь маршрут полностью задан (тоесть смаршрутизируется прочий трафик через eth1), но для проверки пойдет
можно промаркировать так что только ответы с порта 5689 будут рулится
Ответ написан
Olej
@Olej
инженер, программист, преподаватель
Клиент общается к серверу на 192.168.100.246:tcp:5689, нужно завернуть так, чтобы сервер ответил клиенту подставляя source 192.168.49.56:tcp:5689.

Не станет TCP установленное соединение принимать пакеты с другого IP. Да и устанавливать 3-х шаговое соединение тоже не станет.
Вы почитайте разницу между датаграммными (UDP) и и потоковыми (TCP) сетями - это совершенно разные сети.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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