使用frp做端口映射,将内网服务器发布到公网

家里没有公网IP,因此导致家里的GPU服务器,NAS在外网访问起来非常困难,尝试过使用花生壳零遁出的内网穿透工具。但效果都不太好,链接速度不稳定,所以就尝试搞了个frp做了个内网穿透

准备工作

  • 【服务端S】一台带有公网IP的服务器(阿里云、腾讯云等) 
  • 【客户端C】你需要在外网访问的内网服务器
  • 【frp】frp安装文件

其中,服务端是指能提供公网IP的服务器,客户端C需要将端口Port_c映射到公网服务器S的端口Port_s上,通过访问公网服务器S的端口Port_s,就可以访问内网客户端C的Port_c端口了。

获取frp安装文件

进入Git-frp,下载对应的frp文件,我下载的是frp_0.32.0_linux_amd64.tar.gz可以在GitHub页面直接点击下载,也可以使用下面的命令。

注意,客户端C与客户端C都需要下载frp文件

wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz

服务端配置

新建路径/usr/local/frp,将刚才下载的frp文件,解压到这个路径下

mkdir -p /usr/local/frp
tar -zxvf frp_0.32.0_linux_amd64.tar.gz -C /usr/local/frp
cd /usr/local/frp/frp_0.32.0_linux_amd64

进入/usr/local/frp后,需要关注4个文件:分别是frpc、frpc.ini和frps、frps.ini。

frpc、frpc.ini是客户端所关注文件,frps、frps.ini是服务端所关注两个文件。配置服务器端,将客户端的配置文件删除

rm /usr/local/frp/frp_0.32.0_linux_amd64/frpc*

接下来,对frps.ini进行配置。默认的frps.ini中,只包含了端口一项,出于安全考虑,可以添加一个token,我的frps.ini是这样的

[common]
bind_port = 7000
token = 82#¥F95f45@3f #客户端连接服务器端的口令

配置完成后,执行下面命令,就可以启动frp了

/usr/local/frp/frp_0.32.0_linux_amd64/frps -c /usr/local/frp/frp_0.32.0_linux_amd64/frps.ini

需要注意的是,要检查你的公网服务器,7000端口是否对外开放了,不开放端口,是没有办法进行访问的

客户端配置

客户端配置与服务端配置其实大同小异,在新建路径/usr/local/frp,将刚才下载的frp文件,解压到这个路径下

mkdir -p /usr/local/frp
tar -zxvf frp_0.32.0_linux_amd64.tar.gz -C /usr/local/frp
cd /usr/local/frp/frp_0.32.0_linux_amd64

进入/usr/local/frp后,需要关注4个文件:分别是frpc、frpc.ini和frps、frps.ini。

frpc、frpc.ini是客户端所关注文件,frps、frps.ini是服务端所关注两个文件。配置客户端,将服务器端的配置文件删除

rm /usr/local/frp/frp_0.32.0_linux_amd64/frps*

接下来,对frps.ini进行配置。我的frps.ini是这样的

[common]
server_addr = xxx.xxx.xxx.xxx # 服务端ip
server_port =7000 #服务端端口
token = 82#¥F95f45@3f #连接服务端口令

[ssh]
type = tcp local_ip = 127.0.0.1 #127.0.0.1或者本地ip
local_port = 22 #要穿透的本地端口
remote_port =6661 # 暴露到外网的端口

配置完成后,执行下面命令,就可以启动frp了

/usr/local/frp/frp_0.32.0_linux_amd64/frpc -c /usr/local/frp/frp_0.32.0_linux_amd64/frpc.ini

需要注意的是,要检查你的公网服务器6661端口,内网客户端22端口是否开放。

测试

通过 ssh 访问内网机器,假设用户名为 test:ssh -oPort=6661 test@x.x.x.x这里ip为服务端ip,端口为我们暴露到外网的端口即 6661。

使用xshell等ssh链接工具,也可以进行测试

配置开机自启动

为增加内网穿透的稳定性,需要添加开机自启动,我使用systemctl来控制启动。

以服务端为例,首先,编写脚本

sudo vim /lib/systemd/system/frps.service
[Unit]
Description=fraps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple

#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/usr/local/frp/frp_0.32.0_linux_amd64/frps -c /usr/local/frp/frp_0.32.0_linux_amd64/frps.ini
[Install] WantedBy=multi-user.target

客户端的脚本,与服务器端脚本没啥区别,将frps替换成frpc就可以了

[Unit]
Description=fraps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple

#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/usr/local/frp/frp_0.32.0_linux_amd64/frpc -c /usr/local/frp/frp_0.32.0_linux_amd64/frpc.ini
[Install] WantedBy=multi-user.target

然后分别在客户端与服务器端启动 frps
sudo systemctl start frps
再打开自启动
sudo systemctl enable frps

几条有用的命令

  • 重启 sudo systemctl restart frps
  • 停止 sudo systemctl stop frps
  • 查看应用日志 sudo systemctl status frps

总结

  • 本文介绍了ssh远程登录的方法,如果需要完成ftp、http等映射,可以添加端口映射实现
  • frp可以做域名映射,这个后续有时间再写详细过程
  •  直接买性能优异的云主机太贵了,但使用frp做内网穿透,比较费时,可能还有安全问题,这个就看自己的取舍了
  • 生命不息,折腾不止

The End


已发布

分类

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注