四次元科技

科技、动漫、生活、学习以及一切

只花不到150元,部署一套可能是最佳体验的家庭网络系统

前言

哪个男孩不想要一个可以自由驰骋互联网的网络呢?

关于家中的互联网建设这一块,已经不知道有多少博主聊过,自己也是来来回回折腾了很多种方案。
最近终于找到了我直到目前为止我认为可能是最完美的方案——PaoPaoDNS+PaoPaoGateWay。然后就在自己家的软路由系统里部署了起来,目前也是稳定用了一个月感觉非常的舒适。
但是我家里面用的是软路由+虚拟机的方案,本身全套机器下载价格要400元左右了,而且机器也是做了一点点硬改,没有改机能力的人恐怕用起来也会比较麻烦。
于是我就在想,能不能用比较便宜的方案,和较低的功耗,用一些市面上常见的设备来实现这一套方案呢?

最终预期的结果

在尽可能保证正常网络不会受到影响的情况下,实现网内透明代理,以用于科学上网。
附赠功能: 去广告,虚拟局域网组网等

设备选择和采购

于是经过我的思考,最后做出了如下的设备方案:

硬路由-JCG Q30 Pro: 59元


这个价格不算特别的大众,这是一台天线坏掉的机器,而我的家里面因为还有三个其他的无线路由器当做AP使用,所以我不需要无线网络功能。
这台机器的芯片是联发科的mt7981,内存是256m(也有512m的版本),性能较好,可以轻松跑满千兆。而且这款机器还是被OpenWRT和immortalwrt官方支持的型号,可以直接刷主线版的固件,这样也可以避免一些网上所谓的“大神”编译的固件中的各种坑。
机器怎么刷机我这里就不说了,网上有一些现成的资料,在这里说会导致教程太过于复杂,而且也许你的设备也不需要刷机,对吧。
其实我个人目前比较推荐的机器是爱快IK-Q3000,不用刷机就能享受官方的爱快的系统固件,机身自己支持AX3000,如果没有其他无线组网,一台机器就能解决大部分人家中的路由和WiFI了。现在这个机器京东售价159,同样所谓mt7981芯片的机器,他也就比别的机器贵了20-30。30块钱买个免刷机带售后的爱快系统我觉得还是挺香的。

ARM主机-玩客云: 28元


玩客云算是我们垃圾佬应该非常熟悉的一个东西了,他本身是一个拿来做PCDN的所谓的“挖矿”设备,后续随着PCDN的收益越来越低,运营商对PCDN的打击等等原因,现在网上有着大量的机器在流通。而且由于存世量多,玩的人也多,这机器在价格便宜的同时,机器的玩法也开发的比较全面,很多系统都能刷入进去。
我们这里选择给它刷入Armbian,以用来部署Docker容器,刷机方法大家也可以参考网络资料。

X86小主机-中兴CT321G2: 本人购入79元,咸鱼现价50元



这个小机器是之前无意中发现的,机身外壳的做工还不错,虽然是塑料但是很厚实。这个机器由于只有一个千兆网口,不好做软路由,且只有一个无法更换4g硬盘,所以对于垃圾佬来说,可玩性就有点差了,导致价格一直不高。但是这台机器的CPU是小主机里面不太常见的AMD GX-218GL,这块CPU性能和J1900差不太多,功耗也都是在10w左右,但是他有一个J1900没有的优势: 支持AES硬解。
大家都知道AES硬解意味着什么,加上小尺寸,低功耗,所以这台机器非常适合拿来做我们的网关机。
注意: 这个机器只有VGA输出,需要你准备支持VGA的显示器和线,或者转换线。

系统搭建

主网络

首先要保证你的网络是正常的,你需要了解如何使用你的路由器正确的设置上网功能。
我这里以最常见的网络地址作为演示,你可以根据你的需求来设置自己的网段。

路由器IP: 192.168.1.1
DHCP范围: 192.168.1.101-192.168.1.200
局域网段: 192.168.1.0/24
子网掩码: 255.255.255.0
网关机IP: 192.168.1.2
Docker容器机IP: 192.168.1.3

网关机

首先要准备一下PaoPaoGateWay的系统镜像,由于是在物理机运行,所以需要全网卡驱动的支持。官方Github上的镜像是默认不带全网卡驱动的,需要我们用官方的docker来定制一下ios镜像。
定制方式非常简单,随便找一台x86的装有docker的机器(官方容器不支持arm),运行下面两条命令,就能在当前目录获得一个具有全部网卡的ios镜像了。

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

如果你不方便定制,也可以下载我定制好的镜像文件(记得解压)。
paopao-gateway-x86-64-custom-9755f50.zip
==========未完成开始==========
准备一个写磁盘的工具,Rufus、balenaEtcher、UltraISO之类的都可以,我这里使用Rufus。
准备一个U盘,将镜像文件写入到U盘里。
然后将U盘插入x86小主机,在Bios里设置为从U盘启动系统,通电自动启动系统,最后用网线将网口和路由器的Lan口进行连接。
这样网关机这里就算设置完成了。
==========未完成结束==========
注:

Docker机

首先搭建好Docker环境,这里根据不同的设备和系统会有不同的方法,请根据网络上的教程自行操作。
创建目录DNS,并且在其中创建docker-compose.yaml文件,用于配置容器。
docker-compose.yaml文件内容参考如下。

services:
  paopaodns_china:
    image: sliamb/paopaodns:latest
    container_name: PaoPaoDNS-China
    restart: always
    volumes:
      - ./PaoPaoDNS-China:/data
    networks:
      dns:
        ipv4_address: 172.30.1.10 # IP地址为Docker内网分配地址,用于内网访问
    environment:
      - TZ=Asia/Shanghai
      - UPDATE=weekly
      - DNS_SERVERNAME=PaoPaoDNS-China
      - DNSPORT=53
      - CNAUTO=no

  paopaodns _global:
    image: sliamb/paopaodns:latest
    container_name: PaoPaoDNS-Global
    restart: always
    volumes:
      - ./PaoPaoDNS-Global:/data
    networks:
      dns:
        ipu4_address: 172.30.1.20 # IP地址为Docker内网分配地址,用于内网访问
    environment:
      - TZ=Asia/Shanghai
      - UPDATE=weekly
      - DNS_SERVERNAME=PaoPaoDNS-Global
      - DNSPORT=53
      - CNAUTO=yes
      - CNFALL=yes
      - CN_TRACKER=yes
      - USE_HOSTS=no
      - IPU6=no
      - SOCKS5=192.168.1.2:1080 # IP地址为网关机的IP地址
      - SERVER_IP=192.168.1.3 # IP地址为本台宿主机的IP地址
      - CUSTOM_FORWARD=192.168.1.2:53 # IP地址为网关机的IP地址
      - AUTO_FORWARD=yes
      - AUTO_FORWARD_CHECK=yes
      - USE_MARK_DATA=yes
      - HTTP_FILE=yes
    ports:
      - "5304:5304/udp"
      - "5304:5304/tcp"
      - "7889:7889/tcp"

  adguard_home:
    image: adguard/adguardhome:latest
    container_name: AdGuardHome
    restart: always
    depends_on:
    - paopaodns_china
    - paopaodns_global
    volumes:
    - ./AdGuardHome:/opt/adguardhome/work
    - ./AdGuardHome:/opt/adguardhome/conf
    networks:
      dns:
        ipv4_address: 172.30.1.2 # IP地址为Docker内网分配地址,用于内网访问
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "53:53/udp"
      - "53:53/tcp"
      - "80:80/tcp" # 如果不是使用80端口作为网页端口则需要添加对应的端口映射
      - "3000:3000/tcp" # 安装成功后可以删除

networks:
  dns:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.30.1.0/24
          gateway: 172.30.1.1

解释一下这个配置文件。
这个配置文件定义了三个容器。
两个PaoPaoDNS,用来作为AdguardHome的上游DNS,其中一个容器没有做特殊的配置,仅当做本地递归DNS服务器使用。而另一台则添加了分流相关的设置,用于对需要出国的设备进行DNS分流处理。
AdguardHome,用于提供本地DNS服务,给不同的客户端配置不同的上游DNS,以及去广告(虽然是他的本职,但是这里反而成了附赠的功能了)。
注: 爱快官方之前在论坛中提到,系统更新到3.7.12后,DHCP设置将支持对不同的客户端配置不同的DNS,所以用爱快系统的可以根据需求不使用AdguardHome。
接下来启动容器。

docker compose up -d

容器正常启动后,则可以使用本机IP:3000访问AdguardHome的安装页面了,设置一下用户名和密码,以及WebUI的端口(建议80)即可。

网络配置

启动网关机和Docker容器机,让他们的信息出现在你的路由器里面。
在路由器中将网关机的IP固定为192.168.1.2,将Docker机的IP固定为192.168.1.3
然后将DHCP默认的DNS设置为192.168.1.3(如果需要输入两个地址就都填一样的)。
然后重启一下网关机和Docker机,让他们可以获取到新的IP。
接下来网页打开AdguardHome的后台http://192.168.1.3,在DNS设置中,将上游DNS设置为172.30.1.10,并且关闭缓存。
这时我们可以试一下我们的DNS能否正常使用。

nslookup whoami.03k.org 192.168.1.3
服务器:  Unknown
Address:  192.168.1.3

非权威应答:
名称:    whoami.03k.org
Address:  123.234.123.234 #连接权威DNS服务器的IP=你的宽带IP

返回的地址如果是你的公网IP网段,就说明递归DNS已经生效了。
接下来是设置静态路由。
需要添加一条静态路由到路由表里。
(未完成)
如果有使用一些纯靠IP访问的软件(例如网飞、Telegram),还需要把他们的IP端也设置相同的静态路由。

网关配置

网关配置文件在Docker机器的DNS/PaoPaoDNS-Global目录中的ppgw.ini

#paopao-gateway

# mode=socks5|ovpn|yaml|suburl|free
# default: free
# free: 直接出站不走代理
# socks5: 使用socks5代理出站
# ovpn: 使用ovpn代理出站
# yaml: 使用yaml配置文件,yaml配置文件在同目录下,文件名参考下面的yamlfile
# suburl: 使用订阅地址,最常见的应该就是这种了
mode=suburl

# Set fakeip's CIDR here
# default: fake_cidr=7.0.0.0/8
# FakeIP的网段,不需要修改,用默认的就好
fake_cidr=7.0.0.0/8

# Set your trusted DNS here
# default: dns_ip=1.0.0.1
# 这里需要和Docker机,也就是DNS的IP匹配
dns_ip=192.168.1.3
# 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
# 这里需要填入网关IP,用于开启局域网内的socks5代理
socks5_ip="192.168.1.2"
# 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
# 这里是yaml模式时,网关获取的配置文件的文件名
yamlfile="custom.yaml"

# suburl mode settting
# 这里填入你的订阅地址
suburl="https://..."
# 这里是订阅自动更新时间
subtime=1d

# fast_node=check/yes/no
# check: 代表会自动检查下面的URL能否访问,如果不能访问则自动重启服务并重新拉取订阅
# yes: 代表会自动根据延迟切换到延迟最低的节点,同时具有check的功能
# no: 代表不检查延迟与连通性
fast_node=yes
test_node_url="https://www.youtube.com/generate_204"
ext_node="Traffic|Expire| GB|Days|Date"
cpudelay="3000"

# dns burn setting
# depend on fast_node=yes & mode=suburl/yaml
dns_burn=no
# If used with PaoPaoDNS, you can set the PaoPaoDNS:53
# 这里需要设置成DNS的IP
ex_dns="192.168.1.3:53"

# Network traffic records
net_rec=no
max_rec=5000

更详细的参数解释,以及自定义规则等等,请参考官方的文档,如果没有特殊需求,按本文的配置即可。

配置设备DNS

我的教程中的方案,是建立在网内只有一部分设备出国,另一部分正常用网的场景,所以需要针对不同的设备,设置不同的上游DNS服务器。
如果你没有这种需求,可以直接在网络配置那一步中,将上游DNS设置为172.30.1.20,就不用继续往下看了。
如果你也像我一样,只需要部分的设备走出国规则,那就还需要在多一步设置。
打开AdguardHome的后台http://192.168.1.3
打开客户端设置,添加客户端。
添加需要出国的设备的IP或者IP段,然后在下面的自定义上游的地方,将上游DNS设置为172.30.1.20,然后保存即可。

至此系统搭建完毕。

测试

可以使用Speedtest,分别选择国内和国外的测速节点,看一下带宽能否跑满。
可以在https://ip.skk.moe或者https://ip111.cn检查一下IP分流是否正常。
可以用***检查一下Nat等级。

总结

整套设备花费是59+28+50=137元,这里是没有计算U盘和交换机的价格。
U盘作为一个搞机佬,我相信各位家里一定会有的,而交换机要看自己网内具体有多少需要网线的设备,所以我就没有算在内。
这里面路由器的价格可能会有一些上下波动,比如你需要一款可以跑满千兆的路由器,又不想刷机,所以可能买了我推荐的爱快Q3000,那价格就一下多了100元了,但是你买了更好的路由器就算不玩这套系统,那也可以让网络体验变好,也是不亏。而如果你家的网络没有达到千兆,比如只有500M甚至100M,那你大可买一些mt7621的路由器,刷个OP或者爱快的固件,这种路由器咸鱼50以内可以随便买。
希望这篇文章可以帮助到一直想要一套舒适的网络的你。