LINUX.ORG.RU
ФорумAdmin

«Проброс» порта с одного public ip на другой public ip средствами iptables?

 


1

1

Есть две машины с public ip в разных странах. На одну из них контрагент закидывает данные, на конкретный порт, где эти данные принимает специальная программка. Средствами iptables можно завернуть трафик с первой машины на вторую?
Спасибо.

★★★★★

Нет. Юзай TCP/UDP прокси, какой-нибудь balance или samplificator. Либо делай GRE туннель с одного на другой и нать в него.

blind_oracle ★★★★★
()
Последнее исправление: blind_oracle (всего исправлений: 1)
Ответ на: комментарий от rumgot

Поспешил, нужно еще подмену адреса источника тоже делать, чтобы обратно пакеты шли через этот же сервер:

iptables -t nat -A POSTROUTING -p tcp -d 123.456.789.123 --dport 54321 -j MASQUERADE

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Ну-ну, я посмотрю на реакцию шлюза через который этот сервер выходит в мир, когда к нему от твоего сервера прилетит НАТнутый пакет с адресом источника из соседней страны.

Даже если каким-то чудом этот пакет пройдёт все хопы и дойдёт до адресата, то ответный пакет, в соответствии с таблицой роутинга, пойдёт не через твой НАТящий сервер, а напрямую клиенту - ни один TCP коннект не установится, т.к. ты SYN посылал на адрес1, а SYNACK получил от адреса2.

В общем - или прокси или туннель.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Я второе сообщение для кого написал? Там меняется адрес источника тоже. Все должно быть нормально. Должно работать.

rumgot ★★★★★
()
Ответ на: комментарий от blind_oracle

Вообще в первом сообщении я ошибся, там не SNAT, а DNAT.

rumgot ★★★★★
()

правильнее всего это делать через l3 туннель с заменой адреса назначения. при правильной настройке роутинга на хосте получателя, адрес источника менять не придется. в других случаях специальная программка не сможет узнать адрес источника (если конечно он явно не передается на l7)

Rost ★★★★★
()
Последнее исправление: Rost (всего исправлений: 2)

кажется, я понял.
на входящем на первый гейт пакете надо делать prerouting dnat, разрешить forward И на выходящем пакете сделать snat. Потому что если не сделать snat, ответный пакет от второго гейта пойдёт сразу к контрагенту, а контрагент не устанавливал соединения со вторым гейтом. Ответный пакет должен вернуться на первый гейт и уже тот должен ответить контрагенту. Надо опробовать.

targitaj ★★★★★
() автор топика
Последнее исправление: targitaj (всего исправлений: 2)

а можно просто не геморроиться с двойными нат, а запустить что-то типа:

socat TCP-LISTEN:8080,fork TCP:remotehost:3000

эффект тот же будет

Rost ★★★★★
()
Ответ на: комментарий от goodbyeXP

да какой там туннель... Нужен костыль на пару дней пока контрагент не перебьёт конфиг на своей стороне.

targitaj ★★★★★
() автор топика
Ответ на: комментарий от targitaj

данный пример слушает tcp порт 8080 и перенаправляет поступившие соединения на remotehost с портом 3000

для этого надо установить пакет socat

Rost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.