Как настроить двунаправленную переадресацию портов, не зависящую от протокола?

Если вы выполняете действие с каждым файлом в папке и помещаете выходной файл в ту же папку, на мой взгляд, это неразумный подход. Мои > перенаправления вывода всегда заканчиваются в / tmp , если я не знаю, что там недостаточно места для моего вывода. Затем я ищу для него более подходящую файловую систему. Но никогда не помещайте их в тот же каталог, в котором я обрабатываю входные файлы.

0
24.03.2019, 17:49
1 ответ

Итак, после долгих потрясений я смог решить свою первоначальную проблему и поэтому могу опубликовать правильное решение здесь для всех, кто может столкнуться с этим в будущем. Конфигурация прикладного уровня выходит за рамки исходного вопроса.

Во-первых, если у вас настроен ufw, вам необходимо разрешить применение этих правил без блокировки брандмауэром. Это нужно будет сделать на ОБОИХ хостах , если они оба имеют ufw. Это делается с помощью шагов, описанных вhttps://help.ubuntu.com/lts/serverguide/firewall.htmlв разделе «Маскарад IP», и они кратко изложены ниже

.
0) edit /etc/default/ufw to set DEFAULT_FORWARD_POLICY="ACCEPT"
1) edit /etc/ufw/sysctl.conf to set net/ipv4/ip_forward=1 and net/ipv6/conf/default/forwarding=1
2) put the desired iptables rules in /etc/ufw/before.rules using ufw's syntax, starting with *nat and ending with COMMIT
3) restart ufw 

Чтобы перенаправить входящие пакеты и передать их через локальный сервер, используйте следующую конфигурацию Global:

 #ensure forwarding is enabled, just for sanity's sake (for ufw sysctl.conf covers this)
 sysctl -w net.ipv4.ip_forward=1

 #rewrite incoming port 222 to Local:22
 iptables -t nat -A PREROUTING -p tcp --dport 222 -j DNAT --to-dest <Local IP on 10.0.0.0/24 subnet>:22

 #having rewritten the destination, also rewrite the source for all packets that now have a destination of Local:22
 #rewriting the source means that the ACKs and other bidirectional data gets sent back to Global instead of attempting to go from Local directly to the originator
 iptables -t nat -A POSTROUTING -d <Local IP on 10.0.0.0/24 subnet> -p tcp --dport 22 -j SNAT --to-source <Global IP on 10.0.0.0/24 subnet>

 #repeat the above for ports 80 and 443, as in the original question
 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest <Local IP on 10.0.0.0/24 subnet>:80
 iptables -t nat -A POSTROUTING -d <Local IP on 10.0.0.0/24 subnet> -p tcp --dport 80 -j SNAT --to-source <Global IP on 10.0.0.0/24 subnet>

 iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest <Local IP on 10.0.0.0/24 subnet>:443
 iptables -t nat -A POSTROUTING -d <Local IP on 10.0.0.0/24 subnet> -p tcp --dport 443 -j SNAT --to-source <Global IP on 10.0.0.0/24 subnet>

Это относится к входящему прокси-соединению. Для исходящих соединений нам потребуется следующая конфигурация на Local:

 #rewrite outgoing port 25 to Global:25, UNLESS it's meant for localhost (assumes lo is set up for ipv4, and not just ipv6)
 iptables -t nat -A OUTPUT -p tcp '!' -d 127.0.0.1/32 --dport 25 -j DNAT --to-destination <Global IP on 10.0.0.0/24 subnet>:25

 #having rewritten the destination, also rewrite the source for all packets that now have a destination of Global:25
 iptables -t nat -A POSTROUTING -p tcp '!' -d 127.0.0.1/32 --dport 25 -j SNAT --to-source <Local IP on 10.0.0.0/24 subnet>

Нам нужно было разрешить localhost, чтобы можно было подключаться к локальному серверу через этот порт, поскольку именно так должны работать SMTP и многие другие программы, (включая DNS ), которые выполняют проксирование на уровне протокола. Поэтому мы пробросили все, что не было привязано к локальному хосту.

Вот именно! Это полная конфигурация на этом уровне стека, и она доставит ваши пакеты туда, где они должны быть. Конфигурация уровня приложения выходит за рамки этого вопроса.

0
28.01.2020, 03:54

Теги

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