Простая сборка сервера ngrok для проникновения в интрасеть

задняя часть

Зачем строить сервер ngrok

При веб-разработке нам необходимо открыть локальный веб-сайт для доступа из внешней сети (например, когда я занимаюсь локальной разработкой WeChat).

ngrok — это инструмент обратного прокси, который мы можем скачать напрямуюОфициальный сайтОднако из-за того, что официальный сервер сайта находится за границей, он относительно медленный, а бесплатная версия не поддерживает привязку доменных имен второго уровня.

что приготовить

  • Linux-сервер общедоступной сети (желательно centos7, один шаг)
  • независимое доменное имя

Если вы знакомы с докером, вы можете запустить то, что я сделал напрямуюЗеркало сервера ngrokначатьGitHub.com/Jueying/doc…

шаг

1. Установите git, golang и openssl
yum install -y git golang openssl

Версия git и версия golang не должны быть слишком старыми, Centos7 по умолчанию устанавливает git1.8.3 и go1.8.3.

2. клонировать проект ngrok на локальный
git clone https://github.com/inconshreveable/ngrok.git /usr/local/ngrok
3. Создайте сертификат
# 这里替换为自己的独立域名
export NGROK_DOMAIN="huahongbin.cn"

#进入到ngrok目录生成证书
cd /usr/local/ngrok

# 下面的命令用于生成证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

# 将我们生成的证书替换ngrok默认的证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
4. Скомпилируйте сервер и клиент для разных платформ
# 编译64位linux平台服务端
GOOS=linux GOARCH=amd64 make release-server
# 编译64位windows客户端
GOOS=windows GOARCH=amd64 make release-server
# 如果是mac系统,GOOS=darwin。如果是32位,GOARCH=386

После выполнения вы увидите сервер в каталоге ngrok/bin и его подкаталогах.ngrokdи клиентngrok.exe.

5. Запустите сервер
# 指定我们刚才设置的域名,指定http, https, tcp端口号,端口号不要跟其他程序冲突
./bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":8082" -tunnelAddr=":443"
6. Запустите клиент

Скопируйте ngrok.exe в локальную папку (можно использовать winscp) и создайте в папке новый файл конфигурации ngrok.cfg со следующим содержимым:

server_addr: "huahongbin.cn:443"
trust_host_root_certs: false

Замените доменное имя своим собственным независимым доменным именем и замените порт туннельным портом, установленным для запуска сервера ngrok.

Затем используйте следующую команду в cmd для запуска:

ngrok.exe -subdomain=jueying -config=ngrok.cfg 80

80 — это локальный порт, который вы хотите проксировать

введите в браузереhttp://127.0.0.1:4040Вы можете увидеть конкретную информацию о запросе.

Общая проблема

  • При компиляции он застревает на следующих шагахgo get gopkg.in/yaml.v1Это связано с тем, что версия Git слишком низкая. Обновите версию git сервера до 1.7.9.5 или выше.

  • Потому что ngrok должен загрузить некоторые зависимости с иностранных веб-сайтов при первой компиляции. Может быть медленным или даже тайм-аут. Попробуйте это несколько раз, или вы знаете.