使用frp进行内网穿透并设置开启自启
手头有一块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_port是frps绑定的服务器端口,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
再对客户端完成类似的操作就可以愉快的玩耍啦~