Sign inSign up

edalia/yacd-meta

By edalia

Updated 2 months ago

armv7/arm64/amd64 架構的 Yacd-meta 面板,構建基於 MetaCubex 源碼最新分支master

Image
Networking
Web servers
Monitoring & observability
0

2.2K

edalia/yacd-meta repository overview

Screenshot

screenshot1 screenshot2

mihomo + yacd-meta 旁路透明代理設定

1. 創建macvlan網路

ip link show指令查看宿主機物理網卡名稱,比如eth0
在 Docker 中創建一个macvlan網路,假設家庭網段是192.168.66.0/24,主路由是192.168.66.1

docker network create -d macvlan \
  --subnet=192.168.66.0/24 \
  --gateway=192.168.66.1 \
  -o parent=eth0 \
  macnet

2. 部署準備

  1. docker-compose.yml文件: 用於設定 mihomo 和 yacd-meta 啟用參數
  2. setup-tproxy.shshell指令碼: 用於修改 iptable 路由轉發規則
  3. 同目錄下創建一個資料夾,我這裡用名mihomo(名稱隨意,compose 裡的掛載記得改就好)
    裡面放好Geosite.datGeoip.datcongfig.yaml等文件

宿主機檔案結構

.
├── docker-compose.yml
├── setup-tproxy.sh
└── mihomo/
    ├── config.yaml
    ├── geoip.dat
    └── geosite.dat

docker-compose.yml 內容

# docker-compose.yml
networks:
  macnet:
    external: true  # 使用已存在的 macvlan 網路

services:
  mihomo:
    image: metacubex/mihomo:latest
    container_name: mihomo
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: 192.168.66.10 # 指定給 mihomo 的ip
    volumes:
      - ./mihomo:/root/.config/mihomo # 掛載 mihomo 資料夾
      - ./setup-tproxy.sh:/setup-tproxy.sh # 掛載 setup-tproxy 指令碼
    cap_add:
      - NET_ADMIN
      - NET_RAW
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.route_localnet=1

  yacd-meta:
    image: edalia/yacd-meta:latest
    container_name: yacd-meta
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: 192.168.66.11 # 指定給 yacd-meta 的ip

setup-tproxy.sh shell指令碼

#!/bin/sh

# 建立策略路由:fwmark=1 的封包走 table 100,從 lo 出
ip rule add fwmark 1 table 100 2>/dev/null || true
ip route add local default dev lo table 100 2>/dev/null || true

# 建立 MIHOMO chain
iptables -t mangle -N MIHOMO 2>/dev/null || iptables -t mangle -F MIHOMO

# 跳過私有/保留網段,避免迴圈
iptables -t mangle -A MIHOMO -d 0.0.0.0/8       -j RETURN
iptables -t mangle -A MIHOMO -d 10.0.0.0/8       -j RETURN
iptables -t mangle -A MIHOMO -d 127.0.0.0/8      -j RETURN
iptables -t mangle -A MIHOMO -d 169.254.0.0/16   -j RETURN
iptables -t mangle -A MIHOMO -d 172.16.0.0/12    -j RETURN
iptables -t mangle -A MIHOMO -d 192.168.0.0/16   -j RETURN
iptables -t mangle -A MIHOMO -d 224.0.0.0/4      -j RETURN
iptables -t mangle -A MIHOMO -d 240.0.0.0/4      -j RETURN

# 將進入容器的 53 port DNS 請求,重定向到 mihomo 的 1053
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 1053
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 1053

# TCP/UDP 打 tproxy 標記,導向 7893
iptables -t mangle -A MIHOMO -p tcp -j TPROXY --on-port 7893 --tproxy-mark 1
iptables -t mangle -A MIHOMO -p udp -j TPROXY --on-port 7893 --tproxy-mark 1

# PREROUTING 掛上 MIHOMO chain(處理來自其他設備的流量)
iptables -t mangle -A PREROUTING -j MIHOMO

echo "TProxy rules applied successfully."

TCP/UDP 流量會被重定向到7893,即 mihomo 的 tproxy-port
DNS 請求會被劫持到1053,即 mihomo 的 DNS 監聽埠

3. 啟用容器 & 修改容器路由表

  • 檔案全都準備好以後,在compose同目錄下執行: docker compose up -d
  • 啟用成功後,用shell指令碼修改容器路由表,指令:docker exec mihomo sh /setup-tproxy.sh
  • yacd-meta 訪問地址:http://192.168.66.11 ( compose 中分配給 yacd-meta 的 ip )

4. 設定閘道器(gateway)

修改方法分兩種,一種是侵入式的,一種是非侵入式的。

  • 非侵入式:手動為每台上網設備設定 gateway 和 dns 192.168.66.10(指向 mihomo 容器 ip )

Android 設備要把網路設定中 私人DNS 設為 停用
一些瀏覽器 app 自帶的 DNS 設定也要停用,才會遵循 mihomo 配置中的 dns 分流或相關設定

  • 侵入式:修改家庭路由器的 DHCP 設定,把下發的 gateway 和 dns 改成 mihomo 容器的 ip,
    然後更新DHCP租約(設備網卡重啟或拔插網線或wifi重連)

Tag summary

Content type

Image

Digest

sha256:6579d98f8

Size

27 MB

Last updated

2 months ago

docker pull edalia/yacd-meta