Если вы выполняете действие с каждым файлом в папке и помещаете выходной файл в ту же папку, на мой взгляд, это неразумный подход. Мои >
перенаправления вывода всегда заканчиваются в / tmp
, если я не знаю, что там недостаточно места для моего вывода. Затем я ищу для него более подходящую файловую систему. Но никогда не помещайте их в тот же каталог, в котором я обрабатываю входные файлы.
Итак, после долгих потрясений я смог решить свою первоначальную проблему и поэтому могу опубликовать правильное решение здесь для всех, кто может столкнуться с этим в будущем. Конфигурация прикладного уровня выходит за рамки исходного вопроса.
Во-первых, если у вас настроен 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 ), которые выполняют проксирование на уровне протокола. Поэтому мы пробросили все, что не было привязано к локальному хосту.
Вот именно! Это полная конфигурация на этом уровне стека, и она доставит ваши пакеты туда, где они должны быть. Конфигурация уровня приложения выходит за рамки этого вопроса.