kkkgo / PaoPaoGateWay

PaoPao GateWay是一个体积小巧、稳定强大的FakeIP网关
https://blog.03k.org/post/paopaogateway.html
GNU General Public License v3.0
384 stars 26 forks source link
clash fakeip gateway openwrt paopao paopaodns paopaogateway

PaoPao GateWay

PaoPao GateWay

PaoPao GateWay是一个体积小巧、稳定强大的FakeIP网关,核心由clash/mihomo驱动,支持Full Cone NAT ,支持多种方式下发配置,支持多种出站方式,包括自定义socks5、自定义openvpn、自定义yaml节点、订阅模式和自由出站,支持节点测速自动选择、节点排除等功能,并附带web面板可供查看日志连接信息等。PaoPao GateWay可以和其他DNS服务器一起结合使用,比如配合PaoPaoDNSCUSTOM_FORWARD功能就可以完成简单精巧的分流。

你可以从Github Release下载到最新的镜像:https://github.com/kkkgo/PaoPaoGateWay/releases

如果对你有帮助,欢迎点Star,如果需要关注更新,可以点Watch

→详细说明《FakeIP网关的工作原理》

运行要求和配置下发

类型 要求
虚拟机CPU x86-64
内存 最低128MB,推荐512MB
硬盘 不需要
网卡 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

系统会依次尝试以下方式获取配置,并记忆最后一次成功的连接,下次循环优先使用:

系统会不停尝试直到成功获取到配置文件为止,并在后续定期获取新配置(默认值是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

# 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"

# 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

# 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=no
# If used with PaoPaoDNS, you can set the PaoPaoDNS:53
ex_dns="223.5.5.5:53"

# Network traffic records
net_rec=no
max_rec=5000

下面逐项来解释选项的用法:

使用docker定制ISO镜像:ppwgiso

pull size

默认的ISO是通过DHCP下发配置的,这个通常能满足大部分场景需求,然而一些企业内部的服务器网段也许只能设置静态IP,或者通过公开的http端口拉取配置觉得不够安全,或者自带的标准开源clash核心支持的功能和协议不够多等等,现在你可以通过docker镜像sliamb/ppgwiso,来定制你的专属ISO镜像。

使用方法

现在,你可以准备一个文件夹,根据需求,选择性放入以下文件,或者不放:

配置网络:network.ini

如果你要配置静态IP等信息,可以新建一个network.ini如下:

ip=10.10.10.3
mask=255.255.255.0
gw=10.10.10.1
dns1=10.10.10.8
dns2=10.10.10.9

*虚拟机网卡分配的dns仅用于拉取ppgw.ini无其他作用。只有一个dns就只填dns1。

指定ppgw.ini的下载地址:ppgwurl.ini

如果你要指定ppgw.ini的下载地址而不是按上面的规则来寻找,比如你弄了一个带鉴权的http服务器提高安全性,防止配置泄露,你可以新建一个ppgwurl.ini如下:

ppgwurl="http://...."

内嵌ppgw.ini

如果你想固定ppgw.ini的配置而不是通过http远程拉取,你可以直接在当前目录放入ppgw.ini
注意:内嵌ppgw.ini优先级比ppgwurl.ini高,同时内嵌ppgwurl.ini不生效。

内嵌custom.ovpn

你可以把节点信息custom.ovpn放入当前目录,当mode=ovpn的时候将会强制使用该文件。
注意:你仍然需要在ppgw.ini中指定mode=ovpn才会使用到该文件。

内嵌custom.yaml

你可以把节点信息custom.yaml放入当前目录,当mode=yaml的时候将会强制使用该文件。
注意:你仍然需要在ppgw.ini中指定mode=yaml才会使用到该文件。

替换clash/mihomo核心

由于指定版本稳定性未知,不建议替换核心,除非内置核心不能满足需求 你可以把你的amd64的clash/mihomo二进制文件重命名为clash放到当前目录即可。通过替换clash核心,你可以支持更多的协议和规则功能,比如替换为mihomo
注意:使用Wireguard出站建议设置remote-dns-resolve: false

替换Country.mmdb

默认的GEOIP数据Country.mmdb仅包含CNPRIVATE地址,你可以在当前目录放入你自己的Country.mmdb。
默认的数据来源:https://github.com/kkkgo/Country-only-cn-private.mmdb

最后一步:一键生成ISO

你只需要在放好文件的当前目录执行以下命令即可一键生成镜像。
确保在每次进行操作之前,使用docker pull拉取最新的镜像(不同于release版本,docker版本会每天同步最新所有上游代码)。
在Linux上或者Windows上操作均可(在Linux路径错误的话,.:/data可以换成$(pwd):/data):

docker pull sliamb/ppgwiso
docker run --rm -v .:/data sliamb/ppgwiso

如果你的网络环境访问Docker Hub镜像有困难,可以尝试使用public.ecr.aws镜像:

只需等待十几秒,你就可以在当前目录看到你定制的paopao-gateway-x86-64-custom-[hash].iso

可选:物理网卡直通

镜像因为是虚拟机专用默认仅包含虚拟网卡驱动,如果有物理网卡直通需求,你可以把定制的docker镜像切换成fullmod版本,增加驱动(还包含qemu-ga/open-vm-tools):

docker pull sliamb/ppgwiso:fullmod
docker run --rm -v .:/data sliamb/ppgwiso:fullmod

注:fullmod附带了所有可能支持的网卡驱动和相关模块,生成的镜像会大20M左右,可适当增加运行内存。

可选:生成前置嗅探的ISO

生成前置嗅探的ISO,流量到达网关后先尝试嗅探出域名再使用FAKEIP,更适合企业环境使用:

优点:

缺点:

使用该功能,只需要在生成的时候加入环境变量参数SNIFF=yes即可:

docker pull sliamb/ppgwiso
docker run --rm -e SNIFF=yes -v .:/data sliamb/ppgwiso

与DNS服务器配合完成分流

PaoPao GateWay启动后会监听53端口作为FAKEIP的DNS服务器,所有域名的查询到达的话这里都会解析成fake_cidr内的IP。当你在主路由添加fake_cidr段到PaoPao GateWay的静态路由后,你只需要把需要走网关的域名解析转发到PaoPao GateWay的53端口即可,能实现这个功能的DNS软件很多,比如有些系统自带的dnsmasq就可以指定某个域名使用某个DNS服务器。
配合PaoPaoDNSCUSTOM_FORWARD功能就可以完成简单精巧的分流,以下是一个简单的非CN IP的域名转发到PaoPao GateWay的docker compose配置:
假设PaoPaoDNS容器IP是10.10.10.8。PaoPao GateWay的IP是10.10.10.3,还开启了openport功能:

version: "3"

services:
  paopaodns:
    image: sliamb/paopaodns:latest
    container_name: PaoPaoDNS
    restart: always
    volumes:
      - /home/paopaodns:/data
    environment:
      - TZ=Asia/Shanghai
      - UPDATE=weekly
      - DNS_SERVERNAME=PaoPaoDNS,blog.03k.org
      - DNSPORT=53
      - CNAUTO=yes
      - CNFALL=yes
      - CN_TRACKER=yes
      - USE_HOSTS=no
      - IPV6=no
      - SOCKS5=10.10.10.3:1080
      - SERVER_IP=10.10.10.8
      - CUSTOM_FORWARD=10.10.10.3:53
      - AUTO_FORWARD=yes
      - AUTO_FORWARD_CHECK=yes
      - USE_MARK_DATA=yes
      - HTTP_FILE=yes
    ports:
      - "53:53/udp"
      - "53:53/tcp"
      - "5304:5304/udp"
      - "5304:5304/tcp"
      - "7889:7889/tcp"

需要注意的是,一小部分应用不走域名而是IP直连,比如某些聊天软件应用(比如tg网飞),你只需要网上搜索一下对应的IP段,添加少量对应的的静态路由即可。
如果配合PaoPaoDNS使用,强烈建议开启PaoPaoDNSUSE_MARK_DATA功能,提升分流精准度。
注:抓取跳过域名参考

更多教程

由于每个人的网络拓扑平台和路由系统不一样,可能没有通用的详细教程,你可以在论坛查看其他人的配置分享,如果你成功部署了网关,欢迎在论坛分享你的相关过程或者解决方案给其他人参考。

构建说明

PaoPao GateWayiso镜像由Github Actions自动构建仓库代码构建推送,你可以在Actions查看构建日志并对比下载的镜像sha256值。

附录

PaoPaoDNS: https://github.com/kkkgo/PaoPaoDNS
mihomo releases: https://github.com/MetaCubeX/mihomo/releases
mihomo config: https://github.com/MetaCubeX/mihomo/blob/Alpha/docs/config.yaml
mihomo wiki: https://wiki.metacubex.one/config/proxies/
Yacd: https://github.com/haishanh/yacd