内网穿透 by FRP
前期准备
- 具有公网IP的服务器
- 本地主机(内网机器,内网服务器)
服务器配置(具有公网IP的服务器)
下载并解压frp包
$ wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
$ tar -xf frp_0.30.0_linux_amd64.tar.gz
$ cd frp_0.30.0_linux_amd64
Tips:选择对应的安装包,由于服务器和本地主机都是ubuntu系统,选择了linux_amd64安装包
配置frps.ini文件
frps.ini文件内容为
[common]
bind_port = 7000
如果不设置token的话不用修改
运行frps
$ ./frps -c frps.ini
出现下面的信息就代表运行成功了
[I] [service.go:141] frps tcp listen on 0.0.0.0:7000
[I] [root.go:205] start frps success
如果希望后台运行的话
$ nohup ./frps -c frps.ini &
本地主机配置(本地服务器)
下载frp包
$ wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
$ tar -xf frp_0.30.0_linux_amd64.tar.gz
$ cd frp_0.30.0_linux_amd64
Tips:一般内网穿透的都是本地的服务器
配置frpc.ini文件
frpc.ini文件内容为
[common]
server_addr = 服务器公网IP
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6666
local_port是通过内网ssh连接本地主机时的端口
remort_port是设置的通过公网IP连接本地主机的端口
如果要用一台公网IP服务器为两台本地主机做内网穿透,则第二台内网主机的frpc.ini文件改成下面的样子
[common]
server_addr = 服务器公网IP
server_port = 7000
[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6667
frp是通过[ssh]这个名称来区分客户端的,第一台本地主机已经使用了[ssh]这个名称,第二台改成[ssh1],同时remote_port也要改成未使用的端口
运行frpc
$ ./frpc -c frpc.ini
出现下面的信息就代表运行成功了
[I] [service.go:130] frps tcp listen on 0.0.0.0:7000
[I] [root.go:207] Start frps success
[I] [service.go:319] client login info: ip [xxxxx] version [0.30.0] hostname [] os [linux] arch [amd64]
[I] [proxy.go:217] [7940291c148c2fca] [ssh] tcp proxy listen port [6666]
[I] [control.go:335] [7940291c148c2fca] new proxy [ssh] success
如果希望后台运行的话
$ nohup ./frpc -c frpc.ini &
通过公网IP访问本地主机
$ ssh userName@public_IP -p remote_port
remote_prort是frpc.ini中设置的端口
使用Systemctl设置开机自启动
在服务器上配置(具有公网IP的服务器)
$ sudo vim /lib/systemd/system/frps.service
创建并且编辑frps.service文件
填写以下内容:
[Unit]
Description=frps
[Service]
Type=simple
ExecStart=/home/userName/frp_0.30.0_linux_amd64/frps -c /home/userName/frp_0.30.0_linux_amd64/frps.ini
[Install]
WantedBy=multi-user.target
ExecStart填写要执行的命令(通过根目录运行指令)
然后启动frps.service
$ sudo systemctl start frps
$ sudo systemctl enable frps
在本地主机上配置(本地服务器)
$ sudo vim /lib/systemd/system/frpc.service
创建并且编辑frpc.service文件
填写以下内容:
[Unit]
Description=frp
[Service]
Type=simple
ExecStart=/opt/frp_0.30.0_linux_amd64/frpc -c /opt/frp_0.30.0_linux_amd64/frpc.ini
[Install]
WantedBy=multi-user.target
ExecStart填写要执行的命令(通过根目录运行指令)
然后启动frpc.service
$ sudo systemctl start frpc
$ sudo systemctl enable frpc
可能出现的错误(connect time out)
由于我使用的是阿里云服务器,默认不允许6666端口的使用(frpc.ini中的remote_port)
需要登录阿里云的控制台配置
上图允许6000端口(remote_port)连接
接着允许7000端口(bind_port)的连接