Чтобы повысить надежность, отправьте статус выхода в отдельный FD, чтобы его можно было обрабатывать независимо от stdout/stderr:
exit_status() {
"$@"
rv=$?
echo >&3 "$rv"
return "$rv"
}
# exit status and stdout to stdout:
> exit_status echo "hello" 3>&1
hello
0
# exit_status to stdout, stdout to /dev/null
> exit_status echo "hello" 3>&1 1>/dev/null
0
> exit_status ehco "hello" 3>&1 1>/dev/null
ehco: command not found
127
# exit_status to stdout, stdout and stderr to /dev/null
> exit_status ehco "hello" 3>&1 &>/dev/null
127
Обратите внимание, что вам нужно что-то сделать с FD3, иначе он скажет Bad file descriptor
.
Это может быть дополнительно сконфигурировано для обеспечения этих выходных данных входными данными другой программы путем прослушивания другой программой более чем одного FD; вы могли бы использовать это как своего рода Kibana начала 90-х:)
Ваши правила NAT неверны. Попробуйте следующее (, предполагая, что вы только что установили сервер IPSec/VPN)
Для просмотра существующих правил цепочки NAT (перед удалением):
$ sudo iptables -t nat -L -n --line-numbers
Чтобы удалить существующие правила NAT:
$ sudo iptables -t nat -D POSTROUTING 3
Повторяйте приведенную выше команду, пока не останутся следующие два правила NAT:
1 MASQUERADE all -- 192.168.42.0/24 0.0.0.0/0
2 MASQUERADE all -- 192.168.43.0/24 0.0.0.0/0 policy match dir out pol none
Теперь пришло время добавить правило DNAT, которое будет перенаправлять TCP 8080
с интернет-IP-адреса(1.2.3.4
)на IP-адрес VPN-клиента (192.168.42.10
)
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 192.168.42.10:8080
Это все, что вам нужно. Затем вы можете сохранить правила iptables, если все работает нормально.