内网穿透又叫 NAT 穿透,常用的工具有很多,比如 ngrok、花生壳、frp等
#基本实现原理
frp 分为服务端与客户端,前者运行在有公网 IP 的服务器上,后者运行在局域网内的设备上,服务端默认会先开放 7000 端口,然后客户端与其相连。
同时客户端可以开启用于 ssh 的端口,与服务端的某个端口做映射,这样我们在终端访问服务端的端口时,会自动转发到客户端去。
除了 ssh 端口之外,frp 还支持 web 端口来接收 http 访问。
#服务端安装配置
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar zxvf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64/
服务端的配置文件是 frps.ini,默认绑定 7000 端口,如果购置了云服务器,注意打开 7000 端口。
[common]
bind_port = 7000
通过 fprs 二进制文件启动 frp 服务。
./frps -c ./frps.ini
#客户端安装配置
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar zxvf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64/
客户端的配置文件是 frpc.ini
[common]
server_addr = 127.0.0.1
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
common 为通用配置
server_addr 为公网服务器 IP 地址
server_port 为公网服务器配置的 7000 端口
ssh 用于终端命令行访问
type 连接类型,默认为 tcp
local_ip 本地 IP
local_port 用于 ssh 的端口号,默认 22
remote_port 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口
启动客户端进程
./frpc -c ./frpc.ini
#测试
启动完成后就可以通过 ssh 连接到内网服务器了。
ssh -p 6000 enoch@xxx.xx.xxx.xxx