PaoPaoGateWay
PaoPao GateWay是一个体积小巧、稳定强大的FakeIP网关
Install / Use
/learn @kkkgo/PaoPaoGateWayREADME
PaoPao GateWay
<img src="https://raw.githubusercontent.com/kkkgo/PaoPaoGateWay/main/paopaogateway.png" width="200">PaoPao GateWay是一个体积小巧、稳定强大的FakeIP网关,核心由clash/mihomo驱动,支持Full Cone NAT ,支持多种方式下发配置,支持多种出站方式,包括自定义socks5、自定义openvpn、自定义yaml节点、订阅模式和自由出站,支持节点测速自动选择、节点排除等功能,并附带web面板可供查看日志连接信息等。PaoPao GateWay可以和其他DNS服务器一起结合使用,比如配合PaoPaoDNS的CUSTOM_FORWARD功能就可以完成简单精巧的分流。
你可以从Github Release下载到最新的镜像:https://github.com/kkkgo/PaoPaoGateWay/releases
如果对你有帮助,欢迎点Star,如果需要关注更新,可以点Watch。
→详细说明《FakeIP网关的工作原理》
运行要求和配置下发
类型|要求 -|- 虚拟机CPU|x86-64,推荐3核心或更多 内存|最低512MB,推荐1024MB或更多 硬盘|不需要 网卡|1 光驱|1
注意:如果节点数量很多或者连接数很多或者你的配置文件比较复杂的话,建议适当增加内存和CPU核心数
方式一:使用docker内嵌配置
你可以使用Docker一键定制ISO镜像,其中包括为ISO配置静态IP、替换Clash/mihomo核心、替换Country.mmdb、内嵌ppgw.ini等功能,详情见使用Docker定制ISO镜像一节。
方式二:使用DHCP下发配置
PaoPao GateWay是一个iso镜像,为虚拟机运行优化设计,你只需要添加一个网络接口和一个虚拟光驱塞iso即可。虚拟机启动之后,会自动使用DHCP初始化eth0接口,因此你需要在路由器里为这个虚拟机绑定静态的IP地址,如果你在路由器里面找不到哪个是PaoPao GateWay的话,他的主机名是PaoPaoGW,虚拟机也会滚动显示获取到的eth0接口的IP地址和MAC信息。
为了实现配置和虚拟机分离,达到类似docker的效果,PaoPaoGateWay采用了配置下发的方式进行配置,你需要把配置文件放在对应位置,假设系统启动后通过DHCP获取到以下信息:
IP: 10.10.10.3
DNS1: 10.10.10.8
DNS2: 10.10.10.9
网关: 10.10.10.1
系统会依次尝试以下方式获取配置,并记忆最后一次成功的连接,下次循环优先使用:
- 1 从
http://paopao.dns:7889/ppgw.ini下载配置。使用此方式,你需要配合你的DNS服务,把paopao.dns这个域名解析到你的静态文件服务IP,服务端口是7889。如果配合PaoPaoDNS使用,你只需要设置SERVER_IP参数和设置HTTP_FILE=yes,映射7889端口即可,你可以直接把配置文件ppgw.ini放在PaoPaoDNS的/data目录。paopao.dns会从网卡DNS解析获取解析结果,如果结果不可用并且之前有ppgw.ini指定的dns会再尝试获取。 - 2 从
http://10.10.10.1:7889/ppgw.ini下载配置。使用此方式,你可以在主路由上映射7889端口到你的静态文件服务。 - 3 从
http://10.10.10.8:7889/ppgw.ini下载配置。如果你直接使用PaoPaoDNS作为你的DNS服务IP,那么你只需要设置PaoPaoDNS的HTTP_FILE=yes,映射7889端口即可。 - 4 从
http://10.10.10.9:7889/ppgw.ini下载配置。同上。
系统会不停尝试直到成功获取到配置文件为止,并在后续定期获取新配置(默认值是30秒),当配置的值发生变化的时候将会重新加载网关。你也可以手动进入虚拟机本地终端输入reload回车强制马上重载所有配置。
ppgw.ini配置说明
ppgw.ini的所有配置项如下:
#paopao-gateway
# mode=socks5|ovpn|yaml|suburl|free
# default: free
mode=free
# Set fakeip's CIDR here
# default: fake_cidr=7.0.0.0/8
fake_cidr=7.0.0.0/8
# Set your trusted DNS here
# default: dns_ip=1.0.0.1
dns_ip=10.10.10.8
# default: dns_port=53
# If used with PaoPaoDNS, you can set the 5304 port
dns_port=5304
# Clash's web dashboard
clash_web_port="80"
clash_web_password="clashpass"
# default:openport=no
# socks+http mixed 1080
openport=no
#openport_auth="username:password"
# default: udp_enable=no
udp_enable=no
# default:30
sleeptime=30
# socks5 mode settting
# default: socks5_ip=gatewayIP
socks5_ip="10.10.10.5"
# default: socks5_port="7890"
socks5_port="7890"
#socks5_username="username"
#socks5_password="password"
# ovpn mode settting
# The ovpn file in the same directory as the ppgw.ini.
# default: ovpnfile=custom.ovpn
ovpnfile="custom.ovpn"
ovpn_username=""
ovpn_password=""
# yaml mode settting
# The yaml file in the same directory as the ppgw.ini.
# default: yamlfile=custom.yaml
yamlfile="custom.yaml"
# suburl mode settting
suburl="https://..."
subtime=1d
#subcron=5
# fast_node=check/yes/no
fast_node=yes
test_node_url="https://www.youtube.com/generate_204"
ext_node="Traffic|Expire| GB|Days|Date"
cpudelay="3000"
fall_direct="no"
# dns burn setting
# depend on fast_node=yes & mode=suburl/yaml
dns_burn=yes
ex_dns="223.5.5.5:53,1.0.0.1:53"
# Network traffic records
net_rec=no
max_rec=5000
#net_cleanday=15
下面逐项来解释选项的用法:
- 1 配置文件第一行必须以
#paopao-gateway开头。配置格式为选项="值"。 - 2
mode是网关的运行模式,也就是当静态路由的流量到达网关之后,怎么出去。一共有五种模式可以选择(socks5,ovpn,yaml,suburl,free):socks5:配置为socks5代理出站,这是最简单也是最通用的配置方式,如果其他模式不能满足你的需求,你可以把能满足你需求的服务程序开一个socks5代理给网关使用。ovpn:配置为openvpn出站,适用于一些专线场景。yaml:自定义clash的yaml配置文件出站。你可以自己写一个clash格式的yaml配置文件,clash支持多种出站协议,具体写法请看官方wiki。只写proxies:字段即可,也可以包含rules:字段。如果只有proxies:字段,在网关启动后你可以在web端选择节点;如果有rules:字段,则会按照你写的规则来执行。注意,网关使用开源的官方clash核心,如果你的rules:包含闭源Premium core的规则,则无法加载并报错,导致clash无法启动。使用开源的Clash核心是因为功能已经可以满足需求,网关本身也不适合加载过于复杂的规则,Premium core的功能会降低稳定性、增加崩溃的几率,比如RULE-SET功能在启动的时候下载远程url文件失败的话可能会导致clash无法正常启动,而clash无法启动的时候文件可能不能被正常下载,进入了死循环。此外,由于网关也不适用GEOIP规则,请勿写入任何GEOIP规则,因为GEOIP规则依赖GEOIP库更新,而稳定的网关不适合依赖更新运行,此外碰到GEOIP规则会触发DNS解析,降低了处理效率。如果有更复杂的规则需求,建议单独跑一个docker配置你所需的规则,开放socks5端口,让网关使用socks5模式,或者参考使用docker定制ISO镜像一节更换定制的clash核心。选择该模式,你需要把配置文件放在和ppgw.ini同一目录,系统将会在指定的sleeptime内循环检测配置值的变化并重载网关。suburl:自定义远程订阅clash配置,不过是从给定的url下载配置。注意事项与yaml模式基本一样,不能使用包含开源clash功能之外的规则的订阅,或者参考使用docker定制ISO镜像一节更换定制的clash核心。推荐nodelist类型订阅,或者使用subconverter等程序转换订阅。free: 自由出站模式,选择此模式的场景是,假定你在IP层面把虚拟机IP出口走了专线,流量直接出站处理。
- 3
fake_cidr是指定你的FakeIP地址池范围。比如默认值是7.0.0.0/8,你需要在主路由上设置一条静态路由7.0.0.0/8到PaoPaoGateWay。你应该使用一些看起来是公网但实际上不是(或者不会被实际使用)的地址段,比如实验用地址段、DoD网络地址段。如果你有其他真实的公网IP段需要被网关处理,直接写对应的静态路由即可(比如某些聊天软件走的是IP直连而不是域名),除了指定的fake_cidr段会被建立域名映射,其他公网IP地址段都会被网关按普通流量处理分流。【ROS用户看这里】 【爱快用户看这里】 除了静态路由,或者你可以顺便添加DHCP option 121优化。 不建议使用198.18.0.0/15作为fake_cidr段,Chrome会认为这个是局域网段并警告,请参考:- https://developer.chrome.google.cn/blog/local-network-access?hl=zh-cn
- https://wicg.github.io/local-network-access/
- 4
dns_ip和dns_port用于设置可信任的DNS服务器,“可信任”意味着真实无污染的原始解析结果。如果你配合PaoPaoDNS使用,可以把dns_ip设置成PaoPaoDNS的IP,把dns_port设置成映射的5304端口,详情可参见PaoPaoDNS的可映射端口说明。该DNS服务在代理出站的时候实际上不会被用到,流量还是会以域名发送到远端,更多的是用于其他模式的节点解析、规则匹配。 - 5
clash_web_port和clash_web_password是clash web仪表板的设置,分别设置web的端口和访问密码,默认值为80和clashpass。网页登录地址为http://网关IP:端口/ui。你可以在web端查看流量和日志,以及选择节点等。不要忘了登录地址是/ui。clash_web_password选项兼容除特殊字符外所有字符串(比如可以设置clash_web_password="一去二三里烟村四五家")。 - 6
openport设置是否向局域网开启一个1080端口的socks5+http代理,默认值为no,需要开启可以设置为yes。如果你想为代理增加额外的用户密码验证,可以设置openport_auth="username:password",格式为"用户名:密码"。 - 7
udp_enable: 是否允许UDP流量通过网关,默认值为no,设置为no则禁止UDP流量进入网关。(此选项只影响路由,不影响openport选项)注意:如果你的节点不支持UDP或者不稳定不建议开启,开启UDP将会导致QUIC失败导致网站有时候上不去的现象。 - 8
sleeptime是拉取配置检测更新的时间间隔,默认值是30,单位是秒。sleeptime在第一次成功获取到配置后生效,如果配置的值发生变化,将会重载网关配置。如果设置sleeptime低于30会被赋值为30。 - 9
socks5_ip和socks5_port: socks5运行模式的专用设置,指定socks5的服务器IP和端口。如果socks5有用户验证,可以指定socks5_username和socks5_password。 - 10
ovpnfile,ovpn_username和ovpn_password: ovpn运行模式的专用设置,ovpnfile指定ovpn的文件名,系统将会从ppgw.ini的同一目录下载该文件。如果你的ovpn需要用户名和密码认证,可以指定ovpn_username和ovpn_password。 - 11
yamlfile: yaml运行模式的专用设置,指定yaml的文件名,系统将会从ppgw.ini的同一目录下载该文件,并使用sleeptime的值循环刷新检测配置文件变化,值发生变化则重载网关。 - 12
suburl和subtime和subcron: suburl运行模式的专用配置,suburl指定订阅的地址(记得加英文半角双引号),而subtime则指定刷新订阅的时间间隔,单位可以是m(分钟),h(小时)或者d(天),默认值为1d。与yaml模式不同,suburl模式使用单独的刷新间隔而不是sleeptime,因为订阅一般都是动态生成,每次刷新都不一样,会导致刷新网关必定重载。需要注意的是subtime仅配置订阅的时间间隔,检测配置变化仍然是由sleeptime进行。注意如果开了fast_node功能,检测不通的时候会主动拉新订阅。subcron参数支持指定每天0-23时刷新订阅,比如subcron=5每天凌晨5点内刷新订阅。该参数启用的时候subtime参数会失效。 - 13
fast_node、test_node_url和ext_node:测试最快的节点并自动选择该节点的功能。fast_node默认值为no。如果fast_node值为空,并且yaml模式或者suburl的配置文件中不包含rules,则会被设置为yes。test_node_url是用于测速的网址,将会使用clash的api测试延迟,默认值是https://www.youtube.com/generate_204。ext_node是排除测速的节点,多个关键字用竖线隔开,默认值是ext_node="Traffic|Expire| GB|Days|Date"。fast_node的行为如下:- 当
fast_node=yes或者fast_node=check,系统将会在sleeptime间隔检测test_node_url是否可达,若可达,则不进行任何操作;若不可达,则立即停止clash并秒重载网关配置,如果是suburl模式,还会在重载前拉新订阅配置。 - 仅当
fast_node=yes,在网关重载后对所有节点(不包括ext_node)进行测速,并自动选择延迟最低的节点。fast_node=yes会忽略加载rules:规则并开启global模式。 - 当
fast_node=yes仅会在test_node_url不可达的时候主动切换节点,不会影响你在Web手动选择节点使用。因此强烈建议习惯单节点使用的开启该项功能。或者可以使用fast_node=check来实现当test_node_url不可达的时候主动拉新订阅而不主动选择节点。 - 注意,设置为
check不会测速,设置为yes测速失败到阈值会杀死进程并终止应用网关并重载,而check不会杀死进程,仅重载所有配置并关闭所有现有的旧连接。 - 如果你的所有的节点都延迟过高不稳定,建议设置为
no避免增加意外的断流的情况,同时你需要手动切换节点。 cpudelay选项是设定如果CPU处理延迟大于指定值则放弃本次测速。该选项是防止低性能设备负载过高导致死机,默认值为3000。设置更小的值可能会放弃更多测速,设置更高的值可能会让低性能设备负载过高。fall_direct选项设置为yes在fast_node测试全部节点失败的时候,若互联网路由可达,则尝试切换到DIRECT直连。(仅在开启fast_node=yes的时候生效)
- 当
- 14
dns_burn选项和ex_dns选项:dns_burn功能可以把所有节点的域名解析成所有可能的IP结果,把server字段替换为解析的IP结果,以节点名@IP最后一位的名称作为新节点加入,临时硬编码到配置文件中。上面设置的dns_ip和dns_port,和ex_dns选项会被用于dns_burn功能,ex_dns选项用于指定额外的DNS用于解析节点,建议设置为境内DNS以获得不同的结果,如果为空默认值为223.5.5.5:53,如果配合PaoPaoDNS使用,则可以设置为PaoPaoDNSIP:53。你也可以设置多个ex_dns,格式为逗号分隔,比如ex_dns=223.5.5.5:53,1.0.0.1:53。适用于suburl模式和yaml模式,依赖于fast_node=yes。该功能的优点和应用场景如下:- 1、节点使用了分区域解析,只有使用了境内DNS才能连接,参见issue,
dns_burn功能可以额外对节点进行解析。 - 2、节点DNS解析存在多个解析入口,
dns_burn功能会把所有可能的入口都作为新节点加入到配置文件中,在测速的时候就可以选择到速度最好的入口,而不是随机选择。 - 3、节点的所有可能的解析结果都会被临时硬编码到配置文件中,除非所有节点都测速失败或者订阅更新,该配置文件不会变化,可以减少节点的DNS查询,使用IP直连,并有效避免节点临时出现可能的DNS污染或者DNS故障的情况,比如节点域名忘记续费导致解析失败。
- 1、节点使用了分区域解析,只有使用了境内DNS才能连接,参见issue,
- 15
net_rec选项:网络流量记录功能,可以记录网关连接了哪些域名、上传下载消耗了多少流量、客户端IP,并默认按照消耗流量的大小排序,该功能可以根据实际情况方便地调整分析自己的域名规则列表。设置为yes开启该功能后可以在web界面点击[记录],选择下载表格或者在线加载。其中max_rec选项指定最大记录数,默认为5000,当记录的内容超过max_rec的2倍后,仅保留前max_rec项记录。注意事项:- 1、重启或者修改ppgw的密码、Web端口、
max_rec选项、调整任何和net_rec相关选项会导致数据清空。 - 2、如果流量太小连接持续时间过短,有可能在记录之前连接已经关闭,流量有可能会显示为0B。
- 3、理论上会略微增加资源占用,取决于你的并发连接数量以及
max_rec,可适当增加运行资源。net_cleanday=1-31选项,指定每个月某一天清空网络流量数据记录,比如net_cleanday=15每月15日清空网络流量数据记录。如果指定值大于当月有效天数,比如2月份指定31,将会取该月最大值执行,该值为空的时候只有达到了max_rec限制才会清理。
- 1、重启或者修改ppgw的密码、Web端口、
PPSUB 组合订阅使用指南
基本使用流程
- 从左侧菜单 PPsub 编辑器开始,编辑你的订阅提供商、节点组、规则组后,导出 json 文件。也可以下载离线编辑器:https://github.com/kkkgo/PaoPaoGateWay/blob/main/ppsub_offline.html
- 导出了 json 配置后,设置
ppgw.ini的mode=suburl, 设置suburl="ppsub@http://.../ppsub.json"(suburl 前面加ppsub@)
全局健康监测
开启全局健康监测,可以在指定url监测失败的时候,重新处理和拉取所有PaoPaoGateway配置。
订阅提供商
提供订阅的 url,相当于 suburl。假设你有多个订阅,你可以添加多个订阅提供商。
- 勾选强制依赖的属性会要求必须下载到该订阅,否则当处理失败,全部重来
- 当没有订阅提供商被勾选强制依赖,则至少需要一个订阅提供商被下载成功
- 如果节点组依赖的订阅提供商没有下载成功,则跳过生成节点组。
注意:请不要把这个区域和第三方的
proxy-providers功能混淆,PPsub 不使用这个功能,PPSub有
Related Skills
node-connect
347.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
