Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
hev edited this page Oct 24, 2022 · 1 revision

使用NATMap在NAT-1私网IP宽带上部署FRP服务

通常FRPS需要部署在具有公网IP的主机上向FRPC提供中转服务,通过NATMap在运营商的NAT-1上打洞,分配私网IPv4的宽带也能部署FRPS服务,并能像具有公网IP一样在其它外部主机上轻松访问。

拓扑结构

 FRPS NATMap(on gateway) FRPC
Internal: (192.168.0.2:7000) <----> (100.65.11.55:7000)
 ^
 |
 v
External: (112.24.0.23:6348) <------------>
  • FRPS: FRP服务端运行在内网主机,侦听在192.168.0.2:7000端口。
  • NATMap: NATMap运行在网关,侦听在100.65.11.55:7000端口,打洞使公网地址112.24.0.23:6348映射至100.65.11.55:7000,同时又将100.65.11.55:7000映射至192.168.0.2:7000。从外部访问112.24.0.23:6348等同于访问192.168.0.2:7000。
  • FRPC: FRPC运行在外部主机上,通过NATMap打洞获得的公网地址112.24.0.23:6348访问FRP服务。

域名访问

在具有动态公网IPv4的宽带上部署FRP服务,只有公网IPv4因为重新拨号是在动态变化的,而端口则是固定的。利用动态DNS则可以通过固定的域名作为入口实时解析到动态变化的IP,进而访问到服务。

在NAT-1私网IPv4的宽带上,情况稍微有些不同,不仅打洞后获得的运营商侧公网IPv4是动态变化的,端口同样也是动态变化的。为了同样能够使用固定的域名入口访问服务,推荐一种称为IP4P的方法,该方法利用DNS的AAAA类型记录,将公网IPv4地址和端口同时记录在域名解析记录中。FRPC客户端识别到IP4P类型的域名解析结果后,则能获得实时的公网IPv4地址和端口。IP4P的方法要求客户端增加支持,FRP目前已有支持IP4P的衍生项目。

安装部署

FRPS

安装官方的FRPS即可,没有额外的要求。

$ frps
2022年12月26日 17:00:00 [I] [root.go:208] frps uses command line arguments for config
2022年12月26日 17:00:01 [I] [service.go:200] frps tcp listen on 0.0.0.0:7000
2022年12月26日 17:00:01 [I] [root.go:215] frps started successfully

NATMap

安装

DDNS
Cloudflare

创建文件/usr/bin/ddns写入如下内容,并补充必要的变量值:

#!/bin/sh
ZONE=''
RECORD=''
EMAIL=''
AUTH=''
DOMAIN=''
IP4P=${3}
while true; do
 curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE}/dns_records/${RECORD}" \
 -H "X-Auth-Email: ${EMAIL}" \
 -H "Authorization: Bearer ${AUTH}" \
 -H "Content-Type:application/json" \
 --data "{\"type\":\"AAAA\",\"name\":\"${DOMAIN}\",\"content\":\"${IP4P}\",\"ttl\":60,\"proxied\":false}" > /dev/null 2> /dev/null
 if [ $? -eq 0 ]; then
 break
 fi
done

再增加可执行权限:

chmod +x /usr/bin/ddns
OpenWrt 22.03 or later

从软件仓库安装natmap和luci-app-natmap软件包。

或命令行

opkg install natmap luci-app-natmap
其它系统

从项目发布页下载匹配的版本: https://github.com/heiher/natmap/releases

运行

OpenWrt 22.03 or later
1. 登录OpenWrt管理页面,进入「服务」->「NATMap」页面:
2. 点击「Add」按钮,输入如下配置:
  • Protocol: TCP
  • Interface: wan
  • STUN server: turn.cloudflare.com
  • HTTP server: qq.com
  • Bind port: 7000
  • Forward mode: ☑
  • Forward target: 192.168.0.2
  • Forward target port: 7000
  • Notify script: /usr/bin/ddns
3. 保存后NATMap会显示出打洞后的外部公网IPv4地址和端口记录:
4. 防火墙放行TCP协议目的端口7000的入站:
其它系统

将如下内容写入 /etc/rc.local 开机自动启动,或创建其它服务管理配置:

natmap -d -i pppoe-wan -s turn.cloudflare.com -h qq.com -b 7000 -t 192.168.0.2 -p 7000 -e /usr/bin/ddns

防火墙放行TCP协议目的端口7000的入站。

访问测试

域名解析结果

比如域名为: frp.hev.cc

nslookup frp.hev.cc

当配置正确且运行正常时,应当能够解析类似如下结果:

Server:		192.168.0.1
Address:	192.168.0.1#53
Non-authoritative answer:
Name:	frp.hev.cc
Address: 2001::18cc:7018:0017

FRP客户端访问

支持IP4P客户端

从衍生项目发布页下载匹配的版本: https://github.com/heiher/frp/releases

使用域名访问

$ frpc tcp -s frp.hev.cc:0 -l 6000
2022年12月26日 17:01:01 [I] [service.go:298] [6b7a9148614c79f7] login to server success, get run id [6b7a9148614c79f7], server udp port [0]
2022年12月26日 17:01:01 [I] [proxy_manager.go:142] [6b7a9148614c79f7] proxy added: []
2022年12月26日 17:01:01 [I] [control.go:172] [6b7a9148614c79f7] [] start proxy success

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /