1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/newflydd-ngrok

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Исходный текст:

场景需求:家里的几台树莓派通过家用WIFI路由器上网,虽然装了Teamviewer可以远程穿透内网控制图形界面,但远程时屏幕分辨率太小,体验不佳,于是想让树莓派上的SSH也能拥有穿透内网的功能。

前言,关于Ngrok

查阅了很多资料,发现大多数内网穿透功能的实现都与一款Go语言编写的Ngrok项目相关,Ngroк — это целый набор серверных и клиентских решений. Поскольку он написан на языке Go, он обладает очень сильными кроссплатформенными возможностями (но в настоящее время почти все материалы указывают на то, что серверная часть этого проекта развёртывается на Linux). Автор использует Windows VPS от Alibaba Cloud и в последнее время также занимается разработкой на Go, поэтому эта статья будет посвящена тому, как развернуть проект Ngroк на Windows и установить клиент на домашних Raspberry Pi для реализации функции SSH-туннелирования через внутреннюю сеть.

О Ngroк следует отметить следующее:

  • Ngroк используется не только для SSH-туннелирования порта 22, но и может туннелировать несколько портов, которые следуют протоколу TCP/UDP, с помощью простой настройки.
  • Ngroк состоит из сервера и одного или нескольких клиентов.
  • Для Ngroк требуется сервер, размещённый в общедоступной сети с фиксированным IP-адресом, желательно с доступным доменом, и сервер Ngroк развёрнут на нём, например, на хосте Alibaba Cloud автора.
  • Клиенты Ngroк устанавливаются на машинах без общедоступных IP-адресов, таких как Raspberry Pi автора.
  • Сервер Ngroк назначает фиксированный или случайный номер порта при получении запроса от клиента Ngroк, сопоставляя его с портом клиента, чтобы достичь цели туннелирования внутренней сети.
  • Пользователям, использующим SSH-клиент для удалённого подключения, не требуется никакого программного обеспечения Ngroк; для конечных пользователей Ngroк прозрачен.
  • Сам Ngroк имеет европейский общедоступный сервер, который можно использовать без необходимости развёртывания сервера, путём сопоставления поддоменов, бесплатные поддомены сопоставляются случайным образом, а платные поддомены — фиксированно.
  • Обычные пользователи могут напрямую использовать общедоступный сервер Ngroк, недостатком является то, что он немного медленнее, и каждый раз после перезапуска клиента поддомен меняется, и его нельзя использовать постоянно.
  • В Китае также есть некоторые компании, предоставляющие услуги Ngroк, такие как Sunny-Ngroк, которые также являются платными, и скорость может быть немного выше.

Исходный код Ngroк открыт, и он доступен на GitHub, но автор считает его сложным в использовании и включает в себя множество технологий, которые автор считает ненужными, поэтому позже я повторно опубликовал свой перестроенный проект Ngroк на GitHub и синхронизировал его с Code Cloud для удобства использования другими пользователями с помощью простых команд go build или go install для кросс-платформенной компиляции и установки.

Чтобы отдать дань уважения первоначальному автору, мы кратко рассмотрим эти передовые технологии программирования на Golang, и те, кто не интересуется языком Go, могут пропустить следующий раздел:

  • Технология go-bindata — это технология, которая позволяет преобразовать любые ресурсы в двоичные данные и вызвать их хэш в коде Go. Исходный код Ngroк использует эту технологию для включения сертификатов и ключей общедоступной сети и HTML-кода сайта в код Go. Это делает их массивами байтов, вызываемыми по хэшу в программе. Хотя это полезно, у него есть очевидные недостатки, поскольку эта технология требует предварительной генерации кода Go для одного проекта другим проектом, что неизбежно усложняет компиляцию, поэтому Ngroк предоставляет файл makefile для облегчения компиляции пользователями, что немного неудобно, так как изначально это был хороший кроссплатформенный проект Go, но теперь он стал проектом, который может использоваться только в Linux. Автор сначала установил Cygwin и команду make во время первоначальной установки, но позже, после понимания принципов, исходный проект Ngroк был перестроен, избегая использования команды make, которая почти специфична для Linux.
  • Технология build -tags — через проект Ngroк автор впервые узнал об этой функции Go, которая позволяет добавлять метки, такие как // +build !release, в начало кода, чтобы указать режим компиляции, например, в режиме компиляции без release этот файл будет скомпилирован, а затем использовать go build -tags 'release' или go build -tags 'debug' для управления компиляцией файла. Эта функция действительно гибкая и позволяет писать код для разных режимов компиляции в проекте, но недостатком является отсутствие подробных документов, что затрудняет понимание третьими сторонами различных режимов компиляции, что увеличивает сложность компиляции исходного кода на месте, поэтому это также одна из причин использования файла makefile в исходном проекте Ngroк.
  • Технология equinox.io — эта технология позволяет коду оставаться актуальным как во время компиляции, так и во время выполнения, и когда автор обновляет код, третьи стороны могут обновлять его в реальном времени. Я не знаю подробностей, но я видел, что исходный проект Ngroк использовал много токенов equinox.io при компиляции release, чтобы подключиться к удалённому репозиторию и обеспечить обновление кода.

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

正文,准备工作

Далее мы переходим к основному содержанию и начинаем развёртывание Ngroк с нуля, говоря о подготовке:

Аппаратная часть

  • Общедоступный сервер с IP-адресом, в этом эксперименте используется система Windows с доменным именем hexcode.cn.
  • Raspberry Pi с операционной системой RASPBIAN, используемой для развёртывания клиента Ngroк для обеспечения возможности SSH-туннелирования.
  • Компьютер с Windows в качестве среды разработки.

Программное обеспечение

  • Программа для создания сертификатов OpenSSL v1.1.0f Light для Windows.
  • MobaXterm — один из лучших SSH-клиентов.
  • Go 1.9.2 для Windows — компилятор языка Go, который автор использует чаще всего, и язык, который вызывает у автора чувство близости, позволяя кросс-компиляцию для целей Linux, ARM, X86 и других платформ.
  • Перестроенный исходный код Ngroк автора, который не требует ручной загрузки, и будет описан ниже, как использовать команду для получения.
  • Git для Windows — программа, которую знают все разработчики.

Начало работы

Создание сертификата

Для обеспечения безопасности процесса туннелирования Ngroк требует использования SSL-сертификата, и, к счастью, нет необходимости покупать сертификат, выданный центром сертификации CA, обычные пользователи могут самостоятельно создать сертификат с помощью инструмента OpenSSL. Процесс заключается в следующем:

  • Загрузите программу для создания сертификата OpenSSL, упомянутую в разделе программного обеспечения, установите её и добавьте путь к папке bin в переменную окружения, чтобы cmd мог напрямую запускать openssl.exe.
  • Откройте cmd в любом пути и выполните следующие команды (обратите внимание, замените оба экземпляра MY_DOMAIN на свой собственный домен, такой как мой hexcode.cn):
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=MY_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=MY_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem ngrokroot.crt
cp device.crt snakeoil.crt
cp device.key snakeoil.key

После выполнения всех этих команд в текущем пути будут созданы 6 файлов, из которых сервер будет использовать файлы snakeoil.crt и snakeoil.key, а клиент будет использовать файл ngrokroot.crt.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Реконструкция оригинальной версии Ngrok сделала его более лёгким для компиляции на различных платформах, особенно упростив процесс компиляции под Windows. Более подробную информацию можно найти по ссылке: https://www.hexcode.cn/article/show/raspberry-ngrok. Развернуть Свернуть
BSD-3-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/newflydd-ngrok.git
git@api.gitlife.ru:oschina-mirror/newflydd-ngrok.git
oschina-mirror
newflydd-ngrok
newflydd-ngrok
master