今天看啥  ›  专栏  ›  0x7e2

Raspberry远程控制 —— 私网地址NAT到公网

0x7e2  · 掘金  ·  · 2020-04-04 15:38
阅读 14

Raspberry远程控制 —— 私网地址NAT到公网

实验环境

  • 树莓派 3B(包含一个8GB内存卡,越大越好)
  • MacOS 10.15.4(Windows 也可,别是树莓派就行)

目标

  • 树莓派开机自动连接服务器
  • 远程 ssh 连接树莓派

为树莓派安装系统

推荐下载官方提供的 raspbain 系统,后期可以通过修改 SD 卡中的配置文件,连接上 WIFI 网络。下载其他镜像可能做不到这一点。

如果手头的开发机系统是 *inux ,可以使用dd命令来将镜像烧写到 SD 卡。如果是 Windows 系统的话,可以考虑使用一些其他的软件去烧写。

MacOS 下,dd烧写镜像到SD卡的参考命令如下:

# 假设SD卡在系统的设备文件是 /dev/disk2s1
diskutil unmount /dev/disk2s1
复制代码

写镜像(一定小心)

sudo dd bs=4m if=/path_to/your_operator_system.img of=/dev/disk2
复制代码

写镜像过程中不会有进度提示,耐心等待即可。

完事儿之后,将 SD 卡插进树莓派,上电。

显示器、鼠标、键盘、网线啥啥的往上插就行了。如果没有显示器和鼠标键盘的话,则可以通过更改/boot/wpa_supplicant.conf文件,将 WIFI 连接信息配进去,然后再上电即可。

配置文件的参考格式如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
ssid="WiFi-A"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
 
network={
ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}
复制代码

经过重重阻挠,假设已经连接到了网络。

从路由器的设备列表中找到树莓派的 IP,假设为 192.168.1.53, 通过以下命令:

ssh pi@192.168.1.53
复制代码

即可连接到树莓派,默认密码是 raspberry

随后,更新一下系统依赖即可:

sudo apt update && sudo apt upgrade
复制代码

NAT

总所周知,IPv4地址是非常稀缺的资源,目前的话,大概在 20 ~ 30 美元一个。为家里的每一个设备都分配一个 IPv4 地址无疑是非常奢侈的一个事情。IPv6 虽说地址足够多,且现在的支持性虽然好了很多,但是链路还是不通畅,还需要时间去成熟。

NAT 全称是 Network Address Translation,网络地址转换。通过一定的手段,可以将私网网段的 IP 地址转换到公网上。当然这里的前提是我们需要有一个公网 IP 地址。这里不要买,租就好了。

比较合适的办法是在云服务器厂商打折的时候,买一台小的 VPS,一般一年也就不到 100 元。

FRP

将私网IP NAT 到公网的方法有很多,比如有ngrok、natapp等等,上述方法都是基于公网环境,条件较差,速度也不是特别理想ngrok私网部署是收费的,且易用性、功能有限。

比较推荐的解决方案是FRP。开源,支持自己部署到 VPS 上。

FRP 分为两部分,frps和frpc。分别是 server 端和 client 端。绑定了公网IP地址的 VPS 运行 server端,需要远程控制的树莓派需要运行 client 端。

FRPC 配置参考

完整的配置文件参考项目中的frpc_full.ini

其中,server* 要和 frps 中的配置对的上,分别是frps 运行机器所在的公网 IP 地址和运行绑定的 Port。login_fail_exit为 false 的时候,会在断网时候重试,直到连接成功。

admin_* 部分配置后,即可在本地访问 http://192.168.1.53:7400,完成对 client 配置的更改和reload

ssh 部分的 remote_port 字段,值推荐大于 1024,之后可以通过 ssh -oPort=[port] pi@x.x.x.x 通过公网远程控制树莓派(自行替换命令中的 IP 和 Port)。

[common]
user = "your_name"
server_addr = x.x.x.x
server_port = 7000
log_file = /var/log/frp/frpc.log
log_level = info
log_max_days = 7
privilege_token = [token]
login_fail_exit = false

admin_addr = 0.0.0.0
admin_port = 7400
admin_user = admin
admin_pwd = admin

[ssh]
privilege_mode = true
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = [port]
use_gzip = true
use_encryption = true
pool_count = 2

[range:VNC]
privilege_mode = true
type = tcp
local_ip = 127.0.0.1
local_port=5901-5903
remote_port= 55901-55903
FRPS 配置参考
[common]
bind_port = 7000
vhost_http_port = [vhost_port]
subdomain_host = [domain]
dashboard_port = 7500
dashboard_user = [username]
dashboard_pwd = [password]
log_file = ./frps.log
log_level = info
log_max_days = 3
privilege_mode = true
privilege_token = [token]
max_pool_count = 50
复制代码

下面会以 frpc 为例,说明创建自启服务的操作姿势

自启服务

对于树莓派,我们希望每次系统启动的时候,自动运行 frpc,连接到配置好的服务器上,如果断网之后,还应该能够重试下去,保证我们随时随地 attach 进系统。

对于上述需求,开机自启部分可以配置自启动服务来实现。参考的做法如下:

下载 frp release:

# 树莓派中运行
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_arm.tar.gz
tar xzf frp_0.21.0_linux_arm.tar.gz
cd frp_0.21.0_linux_arm
复制代码

将 frpc 和其配置文件移动到合适的位置,/etc一般存放配置文件,/usr/local 一般可以放自己安装的系统级软件,/sbin 一般放网络相关。没有固定的要求,记住放置的位置即可

# 树莓派中运行
sudo mkdir -p /etc/frpc
sudo mkdir -p /var/log/frp
sudo cp frpc /usr/local/sbin
sudo cp frpc.ini /etc/frpc
sudo touch /var/log/frp/frpc.log
复制代码

创建系统服务文件,ExecStart 位置一定得指对

sudo vim /etc/systemd/system/frpc.service
复制代码

参考格式如下:

# /etc/systemd/system/frpc.service

Description=frpc daemon
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/sbin/frpc -c /etc/frpc/frpc.ini

[Install]
WantedBy=multi-user.target

复制代码

注册服务自启

sudo systemctl start frpc
sudo systemctl enable frpc
复制代码

大功告成~,Frps 的配置方式和 Frpc 大同小异,不过需要在 VPS 中操作就好了。

之后在随便任何一台机器上运行

ssh -oPort=[port] user@public_ip
复制代码

就可以通过ssh连接到到树莓派。还可以通过 ssh 命令的 -i 参数,指定连接用的秘钥,实现免密连接。这部分会在接下来的文章中进行说明。

感谢阅读。

长按两秒识别二维码关注




原文地址:访问原文地址
快照地址: 访问文章快照