目标
从公网访问本地局域网内的主机.
原理
本地局域网主机因为没有公网ip, 所以无法在公网中被访问, 但是本地局域网主机是通过ip可以连接到公网服务器的. 所以, 首先在公网服务器和本地局域网主机之间建立连接, 然后把公网服务器指定端口接收到的内容转发到本地局域网主机, 从而实现从公网访问本地局域网内的主机.
前提
有一台拥有公网ip的服务器.
下载frp软件
在服务器上和客户端上下载并解压软件https://github.com/fatedier/frp/releases
配置服务器端
在下载的文件根目录, 配置文件frps.ini
# frps.ini
[common]
bind_port = 7000
7000端口是公网服务器frps(server)和内网客户端frpc(client)程序建立连接的端口, 可以自己设置, 不过一般没必要改. 注意, 如果买的云服务器有防火墙, 把7000端口的tcp打开.
启动服务器端程序
./frps -c ./frps.ini
因为需要终端一直开着才能保持运行, 所以可以用tmux在服务器上模拟一个终端, 或者使用nohup指令放在后台运行
nohup ./frps -c ./frps.ini &> /dev/null &
要关的时候ps查看进程号, kill掉就行
ps -aux | grep "frp"
配置客户端
拿连接本地局域网的ssh为例, 在下载的文件根目录, 配置文件frpc.ini
# frpc.ini
[common]
server_addr = x.x.x.x # 服务器ip
server_port = 7000 # frp服务器端口号, 和服务器端口号保持一致就可
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
这里面一般就只需要改remote_port
就可以, 意味着访问服务器的6000端口号等同与访问本地局域网的22端口(ssh默认端口). 注意, 如果买的云服务器有防火墙, 把6000端口的tcp打开.
然后同样启动客户端
nohup ./frpc -c ./frpc.ini &> /dev/null &
在外网尝试ssh连接局域网
ssh -p 6000 local_user_name@serverip
其他
其他类似http/https的配置, github项目 的README.md文件内都能看到详细的样例.
网友评论