之前的工作中,将实验室路由器的端口转发到了树莓派上,这样能够实现校园网环境下树莓派的访问,但仅限于ssh。 由于笔者还在树莓派上部署了Gitea,非校园网和实验室网络环境下也有访问树莓派的需求,所以使用蒲公英做内网穿透,实现远程访问。
蒲公英
蒲公英的安装这里不赘述,个人使用安装个人版,下载时注意跟系统和CPU架构匹配。树莓派要下载树莓派的专用版。
蒲公英控制台需要注册oray账号,遵循官网导航可以轻松完成。
完成后在控制台创建内网、创建访问。
注意图中对应设备的IP地址,后面有用。
常用指令
Linux版本的蒲公英以deamon形式运行在后台,通过systemctl
管理。
比如在树莓派上运行systemctl status pgyvpn.service
会给出如下结果。
$ systemctl status pgyvpn.service
● pgyvpn.service - Running pgyvpn
Loaded: loaded (/lib/systemd/system/pgyvpn.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-01-24 16:28:27 CST; 6 days ago
Main PID: 3978009 (pgyvpn_monitor)
Tasks: 13 (limit: 4163)
CPU: 1h 18min 9.480s
CGroup: /system.slice/pgyvpn.service
├─ 113361 sleep 30
├─3978009 /bin/bash /usr/share/pgyvpn/script/pgyvpn_monitor
└─3978019 /usr/sbin/pgyvpn_svr -R -A -d --mlink -t -i pgy-api.oray.com -K 255.255.255.255 -p /var/log/oray/pgyvpn_svr -f /etc/oray/pgyvpn/config.ini --logmask 0xFFFFFFF7
Warning: journal has been rotated since unit was started, output may be incomplete.
使用官方安装脚本会自动将蒲公英插入到系统服务中,开机自动启动。
官方另外还提供了命令行访问接口pgyvisitor
。
$ pgyvisitor
Copyright © 2002-2022 Oray. All Rights Reserved.
-h --help help
-v --version get version
These are common pgyvistor commands used in various situations:
login login
logout logout
logininfo display historical login device information
autologin set auto login
bypass display bypass infomation
getmbrs display vpn networking and members information
showsets display setting information
使用pgyvisitor login
登录,根据提示输入用户名(或者uid)和密码。
登录后使用指令pgyvisitor getmbrs -m
查看自己的内网用户。
$ pgyvisitor getmbrs -m
VPN Group Name :master
------------Group Member Information--------------
****************Online Members********************
(PgyVisitor) Name :raspberrypi(localhost)
Virtual IP Address :172.16.2.239
(PgyVisitor) Name :MATE40
Virtual IP Address :172.16.2.181
(PgyVisitor) Name :dennis-x1-carbon
Virtual IP Address :172.16.2.47
可以看到,内容和网页管理界面是一样的。
其他指令可以自行探索,不赘述。
外网访问树莓派
经过上述操作,接入内网的三个设备之间可以相互ping通了,ssh连接树莓派是没问题的了。 但是这个东西里面没域名解析,而笔者的Gitea部署的时候依赖树莓派域名进行部署。
如果使用IP访问会出现404。
实验室内网环境下有mDNS,域名可以广播解析。蒲公英网络环境内没有DNS,没法解析。
另外树莓派在这样的方案下有两个IP,一个是实验室内网IP,一个是蒲公英内网IP,在.ssh/config
中HostName
字段不能填两个IP,也会给ssh带来一定的困扰。
解决方案是改hosts文件。 笔者的笔记本安装了Ubuntu,Windows如何修改hosts自行百度。
在/etc/hosts
中添加如下内容。
192.168.1.2 raspberrypi.local
172.16.2.239 raspberrypi.local
保存后使用如下指令刷新DNS缓存。
sudo systemd-resolve --flush-caches
这样就能在浏览器通过域名访问相关内容了。
想要在ssh访问则需修改~/.ssh/config
中的树莓派相关配置,将HostName
字段改成域名。
Host pi
HostName raspberrypi.local
Port 22
User pi
IdentitiesOnly yes
IdentityFile /home/dennis/.ssh/id_rsa
总结
在固定IP环境下可以通过在hosts中记录IP来实现无DNS解析,方便ssh也方便其他方式访问。