NAT服务器或者家里的服务器由于没有固定的公网IP,搭建Linux服务器的时候需要远程登陆很麻烦,但是我们可以用frp内网穿透工具,我们需要准备一台服务器用来做frp的服务端,通过服务器的固定ip把家里的服务器或者NAT服务器的SSH端口直接映射到公网上
安装FRP
这里以Deiban11为例,首先我们SSH登陆到服务器,先更新源
apt update
从Github下载最新的frp程序,这里以linux版为例,也可以从这里下载frp最新版
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
解压缩frp文件夹
tar -zxvf frp_0.48.0_linux_amd64.tar.gz
重命名frp文件夹
mv frp_0.48.0_linux_amd64 frp
进入到frp文件夹,里面的几个文件比较重要
- frpc frp的客户端运行程序
- frpc.ini frp客户端运行程序配置文件
- frps frp的服务器运行程序
- frps.ini frps的服务端运行程序配置文件
frps.ini配置文件必须要配置的几行配置大概意思如下
[common]
bind_addr = 0.0.0.0
##监听本机服务器 不需要修改
bind_port = ****
##frp服务的运行端口
tcp_bind_port = ****
##服务端和客户端通信的端口,不能和其他端口相同
tcp_bind_port = ****
##服务端和客户端通信的第二个端口,不能和其他端口相同,如果有多台服务器,往下加这行配置就行
heartbeat_timeout = 30
##心跳命令,这里是每隔30秒和客户端通信一次,防止内网穿透失联
frpc.ini配置文件必须要配置的几行配置大概意思如下
[common]
server_addr = ***.***.**.*
##服务端的IP地址
server_port = ****
##服务端的frp运行端口
[ssh]
##配置名称,如果有多台frp客户端连接到一台frp服务端,这个配置名称不能相同
type = tcp
##端口类型 tcp,可以是其他的类型如udp
local_ip = 127.0.0.1
##本地地址,不需要修改
local_port = 22
需要映射的本地端口,这里是22端口
remote_port = ****
服务端和客户端通信的端口
heartbeat_timeout = 30
##心跳命令,这里是每隔30秒和客户端通信一次,防止内网穿透失联
运行frp
在需要映射的服务端和客户端修改相应的配置
服务端运行以下的命令启动
./frps -c frps.ini
客户端运行以下的命令启动
./frpc -c frpc.ini
如果配置正常,客户端和服务端都会显示连接正常的日志
frp设置开机自启
如果直接用命令启动那么当我们关闭ssh界面或者服务器断开的时候frp服务会自动断开,所以我们需要设置他开机自启并且在后台运行
由于大部分的服务器都是以root用户运行,并且默认下载路径也是在root文件夹,一般的用户权限是无法访问这个路径,所以我们需要把frp移动到其他路径去
mv frp /usr/local/etc/
在/etc/systemd/system中新建frp.service文件
touch /etc/systemd/system/frp.service
编辑frp.service文件
vim /etc/systemd/system/frp.service
把下面的配置做相应的修改然后复制粘贴
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/etc/frp/frpc -c /usr/local/etc/frp/frpc.ini
##注意这里,frpc是启动客户端,如果路径frp路径和我的一样,那么这个配置不需要修改
##如果启动服务端,那么要改成frps,frpc.ini也要改成frps.ini
ExecReload=/usr/local/etc/frp/frpc -c /usr/local/etc/frp/frpc.ini
##如上修改
[Install]
WantedBy=multi-user.target
配置完成之后,用以下命令设置开机自启
systemctl enable frp
用下面这个命令启动frp
systemctl start frp
用下面的命令查看frp运行状态,显示running表示运行正常
systemctl status frp
注意的问题
frp设置开机自启之后,如果需要重启服务端和客户端,需要先让服务端重启,等待服务端frp显示运行正常之后在重启客户端,不然会出现莫名的问题导致客户端连接不上服务端