使用frp进行内网穿透并设置开启自启
手头有一块jetson开发板,小组成员有远程访问的需求,但寝室没法获得公网IP,学校内网也不支持IPV6,最后查阅资料决定使用frp部署内网穿透。 本文记录了部署过程中的一些坑,以供之后参考。
frp下载
可以在frp
github项目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
再对客户端完成类似的操作就可以愉快的玩耍啦~