用NAP访问无公网IP的树莓派

2020/2/3 J10c
PROGRAMMING RASPBERRY PI

你是否厌倦了puttty,Xshell的平庸外表,是否厌倦了在外地无法访问家中的树莓派,而运营商却死活不给固定IP,并且为树莓派买一个VPS大材小用而烦恼?本文提供了一种解决方案——使用较为经济的nap

准备

安装ssh

Raspbian默认没有安装openssh-service,先用putty内网连接树莓派,使用apt安装openssh-service,完成后修改sshd_config

$ sudo vim /etc/ssh/sshd_config
#修改: #PasswordAuthentication yes 为: PasswordAuthentication yes
#修改: PermitRootLogin prohibit-password 为: PermitRootLogin yes

注册下载

先照着Napyy的官方文档注册,下载arm客户端到树莓派,解压压缩包(本文解压到了根目录/home/pi/nap_linux_arm

#结构目录
pi@raspberrypi:~ $ tree
.
└── nap_linux_arm
    ├── nap
    ├── nap.ini
    ├── nohup.out
    └── start.sh

尝试开启nap

$ ./nap
INFO[2020-01-19T21:44:48+08:00] login to server success
INFO[2020-01-19T21:44:48+08:00] proxy added: [tcp]
INFO[2020-01-19T21:44:48+08:00] start [tcp] proxy success
INFO[2020-01-19T21:44:48+08:00] forwarding napy.xyz:XXXXX -> 127.0.0.1:22
#如果出现上面这样的输出说明与主机连接成功
#下面检验是否成功穿透,当前终端让他运行着,打开另一个终端
$ ssh -oport={$REMOTE_PORT} pi@{$YOUR_HOST_ID}
#第一次连接会提示输入yes,接着输入密码就连接成功

配置启动脚本

在客户端目录下编写启动脚本start.sh

#!/bin/sh
cd /home/pi/nap_linux_arm #nap_linux_arm为客户端文件夹名
nohup ./nap & #使用nohup命令,使nap在后台运行
# 使用nohup命令,会在同级目录下创建nohup.out来打印命令输出

start.sh添加权限

$ sudo chmod 777 start.sh

可以先运行脚本,如果后台无nap进程,请查看nohup.out分析错误原因。

将脚本文件添加到启动项中

$ sudo vim /etc/rc.local
#找到"exit 0"的上一行,插入:
/home/pi/nap_linux_arm/start.sh start

结束

重启树莓派,等一会儿(开机和启动nap要时间),终端输入ssh -oport={$REMOTE_PORT} pi@{$YOUR_HOST_ID},根据提示输入密码即可成功连接,另外可以根据官方文档YOUR_HOST_ID自定义为你自己的域名。

评语

个人使用nap连接有点延迟,如果在树莓派上码字就很不舒服(应该没人在这上面写代码),别问我为什么要用nap,问就是包不起VPS。。