外网穿透到内网---访问公网IP映射到内网IP---frp使用
公网ip访问内网ip
方案 | 适用场景 | 所需条件 | 复杂度 |
---|---|---|---|
1. 端口映射(DNAT) | 企业有防火墙/NAT设备 | 可配置防火墙规则 | ⭐⭐ |
2. VPN打通网络 | 无公网IP,需安全连接 | 可部署VPN服务器 | ⭐⭐⭐ |
3. 反向代理 + SSH隧道 | 临时测试/低安全性需求 | 云服务器可SSH连接 | ⭐⭐ |
4. 内网穿透工具(frp/ngrok) | 无防火墙控制权 | 有中转服务器 | ⭐⭐⭐ |
方案1:端口映射(DNAT)
适用场景:企业有防火墙/NAT网关,可将公网IP的流量转发到内网。操作步骤
1.在防火墙/NAT设备上配置DNAT规则:
text
公网IP:80 → 内网IP:192.168.1.71:80
a.华为/思科防火墙示例:
nat server global <公网IP> 80 inside 192.168.1.71 80
2.云服务器Nginx配置:
server {listen 80;server_name test1.cdy.cn;location / {proxy_pass http://192.168.1.71:80; # 直接指向内网IP}
}
3.验证连通性:
curl http://192.168.1.71:80 # 在云服务器上测试能否访问内网
方案2:VPN打通网络
适用场景:无公网IP映射权限,需加密通信(如WireGuard/OpenVPN)。
操作步骤
1.在内网部署VPN服务器(如WireGuard):
#内网服务器(192.168.1.1)上安装WireGuard
apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
2.云服务器连接VPN:
ini
# /etc/wireguard/wg0.conf(云服务器配置)
[Interface]
PrivateKey = <云服务器私钥>
Address = 10.8.0.2/24[Peer]
PublicKey = <内网VPN服务器公钥>
Endpoint = <内网VPN公网IP>:51820
AllowedIPs = 192.168.1.0/24 # 允许访问内网段
3.Nginx直接代理内网IP:
nginx
proxy_pass http://192.168.1.71:80; # 通过VPN隧道可达
方案3:SSH隧道(临时测试)
适用场景:快速临时访问,无需复杂配置。
操作步骤
1.从内网服务器建立SSH反向隧道:
# 在内网机器(能访问192.168.1.71)执行:
ssh -N -R 8080:192.168.1.71:80 root@<云服务器IP>
2.云服务器Nginx配置:
nginx
location / {proxy_pass http://127.0.0.1:8080; # 转发到SSH隧道端口
}
方案4:内网穿透工具(frp)
适用场景:无防火墙控制权,需通过中转服务器。
操作步骤
1.在中转服务器(云)安装frp服务端:
ini
# frps.ini
[common]
bind_port = 7000
2.内网机器运行frp客户端:
ini
# frpc.ini
[common]
server_addr = <云服务器IP>
server_port = 7000[web]
type = tcp
local_ip = 192.168.1.71
local_port = 80
remote_port = 60080
3.云服务器Nginx配置:
nginx
proxy_pass http://127.0.0.1:60080; # 转发到frp暴露的端口
本人使用的是方案4:内网穿透工具(frp)
具体如下:
安装frp
1.安装文档:https://gofrp.org/zh-cn/docs/setup/
服务端
准备一台公网上能正常访问的服务器,例如:49.100.101.88
1.下载frp解压之后
2.修改frps.toml文件
这里绑定端口为7000
3.在服务端启动frps服务
自行去配置并且启动frp服务
4.本地修改frpc.tom文件
serverAddr = “47.100.101.88” #服务器IP
serverPort = 7000
5.本地运行frpc.exe
6.浏览器登录服务端查看
ps:
根据以上的配置直接访问
49.100.101.88:7003 会转到内网的 192.168.10.176:8002