手头有一块jetson开发板,小组成员有远程访问的需求,但寝室没法获得公网IP,学校内网也不支持IPV6,最后查阅资料决定使用frp部署内网穿透。 本文记录了部署过程中的一些坑,以供之后参考。

frp下载

可以在frpgithub项目release界面下载对应版本的服务器端和客户端二进制文件。

注意需要区分不同架构。我用的jetson是arm64,服务器是amd64。

启动frp

名词解释

服务器端:具有公网ip的设备

客户端:需要穿透的设备

服务器端配置

服务器端需要用到的文件是可执行文件frps配置文件frps.ini

frps.ini的内容为:

[common]
bind_port = 7000

服务器需开放7000端口和后文提到的远程端口。

如果没有权限,需要给frps添加可执行权限:

sudo chmod +x frps

再运行服务器端:

./frps -c frps.ini

客户端配置

服务器端需要用到的文件是可执行文件frpc配置文件frpc.ini

以ssh内网穿透为例frpc.ini的内容为:

server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

其中,server_addr是服务器的公网IP,server_portfrps绑定的服务器端口,local_port是需要穿透的端口,frp会将remote_port映射到local_port

服务器的防火墙需要开放远程端口remote_port

如果没有权限,需要给frpc添加可执行权限:

sudo chmod +x frpc

再运行服务器端:

./frpc -c frpc.ini

这样就可以使用命令ssh username@IP -p 6000远程连接内网设备。

设置自启动

上述步骤仅能够临时解决需求,一旦服务器或者客户端重启就失效了。

本文采取将两个程序注册为服务,并设置服务自启动的方式解决。

新建服务

system路径下新建一个frps.service(客户端新建frpc):

sudo vim /lib/systemd/system/frps.service

并写入以下内容:

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target

ExecStart填写fprs文件所在路径

设置自启

依次执行以下命令:

#刷新服务列表:
sudo systemctl daemon-reload
#设置开机自启
sudo systemctl enable frps

再对客户端完成类似的操作就可以愉快的玩耍啦~

参考链接

cnblogs.com/srczhang/p/

gofrp.org/docs/