Предположим, у вас есть хост (хоста), на котором запущена служба TCP (например, VNC-сервер на порту 5901). Вы хотите получить доступ к этой службе с другого хоста (hostb), на котором работает клиент VNC. Оба хоста подключены к Интернету, но есть некоторые ограничения:
1. Хоста может быть достигнута из Интернета, используя любой из его портов TCP
VNC-клиент на hostb подключается к hosta:5091 напрямую.
2. к хосте можно добраться из интернета только через SSH
От hostb:
ssh -L 5901:localhost:5901 usera@hosta
VNC-клиент на hostb подключается к localhost:5901
3. Хоста не может быть достигнута из Интернета (например, он находится за CGN / CGNAT). Тем не менее, hostb может быть достигнуто из Интернета
Из хоста:
ssh -R 5901:localhost:5901 userb@hostb
VNC-клиент на hostb подключается к localhost:5901
4. Хоста и хостб не могут быть доступны из Интернета. Они стоят за CGN / CGNAT; они могут создавать только исходящие соединения
Мы можем использовать другой хост (hostc), к которому можно обратиться из Интернета, используя ssh.
Из хоста:
ssh -R 5555:localhost:5901 userc@hostc
От hostb:
ssh -L 5901:localhost:5555 userc@hostc
VNC-клиент на hostb подключается к localhost:5901
У меня есть случай, подобный описанному выше 4-му сценарию, но я не хочу использовать третий хост (hostc), в основном из-за соображений производительности и стоимости.
Каковы мои альтернативные варианты (дешевле [= бесплатно] и лучше производительность)?
Примечание 1: Я проверил и определил , что хотя TCP перфорация не работает в моем случае, UDP перфорация делает работу. Однако мне нужен инструмент, который установит сеанс, ориентированный на соединение (аналогично TCP), по UDP, который будет использовать дырочку в UDP.
Примечание 2: Не используя ни одну из программ "дырокола UDP", доступных в Интернете, я решил написать свою собственную. Я все еще улучшаю это, но, как это, это работает довольно хорошо. Вы можете найти это здесь.