Ngrok实现内网穿透

ngrok 介绍:

ngrok 是一款用 go 语言开发的开源软件,它是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.

ngrok 可以做 TCP 端口转发,对于 Linux 可以将其映射到 22 端口进行 SSH 连接,

Windows 的远程桌面可以将其映射到 3389 端口来实现.

同理,如果要做 MySQL 的远程连接,只需映射 3306 端口即可


【frp 更加好用,推荐使用frp github:https://github.com/fatedier/frp


准备工作:

建议为腾讯或者阿里云主机

域名:ngrok.dvcloud.xin

系统:centos7.6

功能:主要使本地电脑远程映射到公网上面

操作如下:

  1. 安装 gcc 和git

yum install gcc git  -y

    2.安装go 环境

yum install golang -y

如果提示包不存在,需要安装 

yum install -y epel-release
yum install golang -y

图片.png

3.下载 ngrok 源码

cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git

4.生成证书:

cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048  
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.dvcloud.xin" -days 5000 -out rootCA.pem  
openssl genrsa -out server.key 2048  
openssl req -new -key server.key -subj "/CN=ngrok.dvcloud.xin" -out server.csr  
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

将生成的证书替换掉 ngrok默认的证书

\cp rootCA.pem assets/client/tls/ngrokroot.crt 
\cp server.crt assets/server/tls/dvcloud.crt 
\cp server.key assets/server/tls/dvcloud.key

5.编译ngrokd 服务端

GOOS=linux GOARCH=amd64 make release-server

6.编译客户端

GOOS=windows GOARCH=amd64 make release-client
#编译成功后会在ngrok/bin/下面生成一个windows_amd64目录下面有ngrok.exe

#Linux 平台 32 位系统:GOOS=linux GOARCH=386
#Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
#Windows 平台 32 位系统:GOOS=windows GOARCH=386
#Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
#MAC 平台 32 位系统:GOOS=darwin GOARCH=386
#MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
#ARM 平台:GOOS=linux GOARCH=arm

图片.png

7.添加自定义系统服务

vim /usr/lib/systemd/system/ngrok.service
[Unit]
Description=ngrok
After=network.target
 
[Service]
Type=simple  
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrokd -tlsCrt=/usr/local/ngrok/assets/server/tls/dvcloud.crt -tlsKey=/usr/local/ngrok/assets/server/tls/dvcloud.key  -domain=ngrok.dvcloud.xin -httpAddr=:800 -httpsAddr=:801 -tunnelAddr=:55552 %i
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# ngrokd 日志可以通过启动参数指定  -log=/var/log/ngrokd.logs

# 重载系统服务:

systemctl daemon-reload

# 设置开机启动

systemctl enable ngrok.service

# 启动服务

systemctl start ngrok.service

图片.png

日志可以在 /var/log/messages

windows 10 客户端操作

将生成的/usr/local/ngrok/bin/windows_amd64/ 整个目录复制到  C:\Program Files 目录内

然后写一个配置文件ngrok.conf

内容如下:

server_addr: ngrok.dvcloud.xin:55552
trust_host_root_certs: false
tunnels:
    ssh:
        remote_port: 36603
        proto:
            tcp: 3389

图片.png

然后保存,手动执行命令测试是否正常

图片.png

图片.png

测试时正常的,为了方便下次电脑启动直接使用,因此

下载nssm.exe 将ngrok 封装为windows启动服务

http://www.nssm.cc/download

图片.png

然后,就可以直接运行了。


Linux x64 位客户端操作如下:

ngrok.tar.gz

解压到 /usr/local 目录

tar xvf ngrok.tar.gz -C /usr/local

然后修改 配置/usr/local/ngrok/conf/ngrok.conf

添加开机启动服务

vim /usr/lib/systemd/system/ngrok.service
[Unit]
Description=ngrok
After=network.target
  
[Service]
Type=simple  
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrok -config=/usr/local/ngrok/conf/ngrok.conf -log /var/log/ngrok/ngrok.log start-all
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

# 重载系统服务:

systemctl daemon-reload

# 设置开机启动

systemctl enable ngrok.service

# 启动服务

systemctl start ngrok.service

  • Ngrok实现内网穿透已关闭评论
  • 1,266 views
    A+
发布日期:2019年03月02日  所属分类:linux  Linux实验