Лучшее решение - использовать netcat. Это работает также с соединениями с localhost, и нет необходимости менять sysctl.
Весь трюк в том, чтобы создать named pipe
,
mkfifo mypipe
и используйте это так:
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
Этот пример был создан, чтобы позволить вам протестировать эту команду с помощью ssh. Он перенаправляет соединения ssh с порта 2222 на порт mySSHport, что бы это ни было (22?).
Теперь, если вы попытаетесь SSH в порт 2222,
ssh me@localhost -p 2222
Вы будете авторизованы.
Флаг -k
инструктирует netcat продолжать прослушивание даже после завершения первого соединения. Вы можете улучшить его устойчивость, вставив его в бесконечный цикл while:
while true; do
# echo "Listening..."
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
done
И, конечно, возвращаясь к OP, для портов UDP нужно добавить флаг -u.
Редактировать:
Я только что понял, что в системах под управлением GNU-версии nc (netcat), таких как Arch Linux, команда должна быть
nc -l -p 2222 0<mypipe | nc localhost mySSHport 1>mypipe
Извиняюсь за неудобства.