利用frp软件做反向代理来实现内网穿透,这个方案是需要你有一台带公网IP的云服务器的,优点就是完全可控,自己想配置多少个端口的穿透都可以,速度跟你的云服务器带宽有关。
如何安装配置frp:
-
frp分为frps(server)和frpc(client)两个包 ,其中前者安装到我们的云服务器上,后者安装在需要被外网访问到的各个设备上
- 在https://github.com/fatedier/frp/releases下载适合你服务器系统的frp软件,我这里是用的是腾讯云64位Ubuntu20.04所以选择frp_0.37.0_linux_amd64.tar.gz,下好之后解压:
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
- 我们需要编辑的文件是frps.ini :内容改为:
[common] bind_port = 7000 # frp服务的端口号,可以自己定 dashboard_port = 7500 # frp的web界面的端口号 dashboard_user = user # web界面的登陆账户,自己修改 dashboard_pwd = pass # web界面的登陆密码,自己修改 authentication_method = token token = xxxxx # frp客户端连接时的密码,自己修改
- 保存配置后,使用该命令启动:
./frps -c ./frps.ini
- 在浏览器输入 [云服务器的公网ip]:7500 即可访问到 frp的web管理界面。
- 注意,可能需要去云服务器控制台配置安全组规则 开放以上涉及到的端口,否则无法访问。
配置需要被外网访问到的设备
- 下载相应版本的frpc软件包(跟刚刚一样的):https://github.com/fatedier/frp/releases,这里选amd64的,下好之后解压到一个临时文件夹。
- 修改frpc.ini配置文件,内容如下:
[common]
server_addr = xx.xx.xx.xx # 你的云服务器的公网ip
authentication_method = token
token = xxxxx # 刚刚配置的frp连接密码
server_port = 7000 # 刚刚配置的frp服务端口
[Fusion-ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 20022
[Fusion-rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 23389
- 通过上面的脚本就可以把对于云服务器特定端口的访问给重定向到本地服务器的某个端口了,简单地讲就是:假如我用SSH客户端访问 [云服务器ip]:20022,就可以经过反向代理直接访问到[本地的训练服务器ip]:22;同理需要连接远程桌面的话,只需要访问[云服务器ip]:23389就可以了。
当然你也可以修改脚本添加更多映射~
- 添加开机自动启动的脚本,新建一个文件内容如下:
文件名/etc/systemd/system/frpc.service
,注意修改其中的路径:
[Fusion]
Description=Frp Server Daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frp/frpc -c /usr/local/bin/frp/frpc.ini # 修改为你的frp实际安装目录
ExecStop=/usr/bin/killall frpc
#启动失败1分钟后再次启动
RestartSec=1min
KillMode=control-group
#重启控制:总是重启
Restart=always
[Install]
WantedBy=multi-user.target
-
然后执行以下命令启用脚本:
sudo systemctl enable frpc.service
sudo systemctl start frpc.service
-
通过下面的命令查看服务状态,如果是running的话就说明可以了:
sudo systemctl status frpc.service
这里顺便提一下,按照习惯一般把上面的frp软件解压防止在/usr/local/bin目录下。Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的
- /usr:系统级的目录,可以理解为C:/Windows/
- /usr/lib:可以理解为C:/Windows/System32
- /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/,用户自己编译的软件默认会安装到这个目录下
- /opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用
- 源码放哪里?
- /usr/src:系统级的源码目录
- /usr/local/src:用户级的源码目录。