使用树莓派让外网设备拥有内网环境

使用场景

手里有个项目是需要在内网环境进行开发的,但是我们开发人员平时都是在外网环境连接不上内网,每次部署调试的时候都得跑到内网环境中部署,非常不方便

一、整体思路

  1. 如何让树莓派同时拥有外网与内网网络
  2. 如何让外网与树莓派相通
  3. 如何将内网环境代理出去
  4. 如何制定容灾机制

二、树莓派同时拥有外网与内网网络

1)环境准备:

  1. 树莓派系统:ubuntu mate 18.04
  2. 树莓派型号:3b+
  3. 树莓派联网:以太网口连接内网,wifi连接外网

2)网络设置:

  1. 以太网与wifi同时上网
    单击 桌面右上角的网络图标
    选择 编辑连接
    双击 以太网 Wired Connection
    选择 ipv4设置
    点击 路由
    勾选 仅将此连接用于相对应的网络上的资源
    重启机器。
  2. 设置wifi系统启动自动连接
    单击 桌面右上角的网络图标
    选择 编辑连接
    双击 WIFI xxx
    网络配置界面有一个connect automatically勾上
    重启机器
  3. 为以太网添加网关路由(设置仅将此连接用于相对应的网络上的资源后,该网卡的网关就设没有了,需要手动添加),eth0代表以太网的网卡,192.168.8.254为以太网的网关,192.168.8.0/24代表是访问192.168.8.x的内网ip是会走192.168.8.254这个网关
route add -net 192.168.8.0/24 gw 192.168.8.254 dev eth0

三、外网与树莓派相通:使用ngrok内网穿透

我们是将内网设备穿透出去,为了安全考虑,最好是自己搭建ngrok服务,如果没条件的也可以使用其他人搭建的ngrok服务

1)环境准备:

  1. 云服务器:各大云的ubuntu 18.04 64位服务器(例如:192.168.8.1)
  2. 安全组:放开4443、80、43端口,51000-52000端口(51000-52000端口用作穿透的tcp端口使用)
  3. 域名:购买个域名,有需要备案的可以进行备案(例如:linker.ren)
  4. 域名解析:解析 ngrok.linker.ren 到 192.168.8.1,和解析 *.ngrok.linker.ren 到 192.168.8.1

2)安装搭建

1.安装git

sudo apt-get install  git

2.安装golang

sudo wget https://studygolang.com/dl/golang/go1.15.linux-amd64.tar.gz

解压到/usr/bin目录中

sudo tar zxf go1.15.linux-amd64.tar.gz -C /usr/bin

添加环境变量

echo "export PATH=/usr/bin/go/bin:$PATH" >> /etc/profile
source /etc/profile

3.安装部署ngrok

配置ngrok的domain

export NGROK_DOMAIN="ngrok.linker.ren"

克隆ngrok

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

进入/usr/local/ngrok目录

cd 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

替换旧证书,请确保证书被替换成功,如果替换不成功可以删除原有证书再复制

cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
cp -rf device.crt assets/server/tls/snakeoil.crt
cp -rf device.key assets/server/tls/snakeoil.key

编译安装ngrok服务端

GOOS=linux GOARCH=amd64 make release-server

编译完成后,nohup后台运行服务端

nohup ./bin/ngrokd -domain="ngrok.linker.ren" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" &

编译客户端

# arm平台客户端,运行在树莓派
GOOS=linux GOARCH=arm make release-client
# 生成的可执行文件为:bin/linux_arm/ngrok

# Linux平台32和64位系统客户端
GOOS=linux GOARCH=386 make release-client
GOOS=linux GOARCH=amd64 make release-client   
# 生成的可执行文件分别为:bin/linux_386/ngrok
#                     bin/ngrok

# Windows平台32和64位系统客户端
GOOS=windows GOARCH=386   make release-client
GOOS=windows GOARCH=amd64 make release-client
# 生成的可执行文件分别为:bin/windows_386/ngrok.exe
#                     bin/windows_amd64/ngrok.exe

# MacOs平台客户端
GOOS=darwin GOARCH=amd64 make release-client
# 生成的可执行文件为:bin/darwin_amd64/ngrok

客户端配置模板(ngrok.conf)

server_addr: "ngrok.linker.ren:4443"
trust_host_root_certs: false

tunnels:
    httptun:
      remote_port: 80
      subdomain: xxx
      proto:
        http: 127.0.0.1:80
    httpstun:
      remote_port: 443
      subdomain: xxx
      proto:
        https: 127.0.0.1:443
    tcptun:
      remote_port: 51000
      proto:
        tcp: 127.0.0.1:22

客户端启动命令

./ngrok -config=ngrok.conf start-all

四、如何将内网环境代理出去(ss/ssr服务代理)

1)安装部署ss/ssr

下载自动部署脚本

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh

执行自动部署ssr脚本

bash ssr.sh

之后的步骤

  1. 输入数字1选择安装ssr
  2. 设置ssr服务端口:2333
  3. 设置密码:xxxx
  4. 设置加密方式:ase-256-cfb
  5. 设置协议插件:auth_sha1_v4
  6. 设置协议插件兼容原版:y
  7. 设置混淆插件:plain
  8. 然后设备数限制、单线程限速、端口总限速都按回车选择默认
  9. 遇到Total download size:63M,Is this ok 选择y
  10. 之后开始自动部署

2)将ss/ssr穿透到外网

树莓派运行ngrok客户端,客户端配置加入ss/ssr的服务端口2333,穿透出的端口为51001,
则外网对应的ssr链接为:ngrok.linker.ren:51001

修改客户端配置(ngrok.conf)

server_addr: "ngrok.linker.ren:4443"
trust_host_root_certs: false

tunnels:
    httptun:
      remote_port: 80
      subdomain: xxx
      proto:
        http: 127.0.0.1:80
    httpstun:
      remote_port: 443
      subdomain: xxx
      proto:
        https: 127.0.0.1:443
    tcptun:
      remote_port: 51000
      proto:
        tcp: 127.0.0.1:22
    tcptun2:
      remote_port: 51001
      proto:
        tcp: 127.0.0.1:2333

五、容灾机制

1)定时任务

为ngrok客户端编写了个启动脚本,使用crontab -e定时5分钟执行一次,保证ngrok服务运行正常

*/5 *  *  *  * /usr/local/ngrok/start.sh

2)脚本原理:

先访问当前启动的ngrok客户端的端口是否可以访问,如果可以访问则不做处理,如果访问失败,则先kill掉ngrok进程,然后再执行一遍启动命令

3)ngrok的启动脚本:start.sh

#!/bin/sh
SERVER=ngrok.linker.ren
PORT=51000
`nc -z -v -w5 $SERVER $PORT`
result1=$?


if [  "$result1" != 0 ]; then
        #先杀进程
        PROCESS=`ps -ef|grep ngrok|grep -v grep|grep -v PPID|awk '{ print $2}'`
        for i in $PROCESS
        do
                if ["$i" !=0 ]; then
                        echo "Kill the ngrok process [ $i ]"
                        kill -9 $i
                else
                        echo '一个不删'
                fi
        done
        path=/usr/local/ngrok
        nohup  $path/ngrok -config=$path/ngrok.conf start-all &
        echo "RESTART Ngrok"

else
        echo 'Ngrok is live'

fi
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值