Xray: с wireguard inbound не работает fakedns

Всем привет.

Есть домашний сервер, решил на нём поднять xray, а уже к нему подключаться с роутера по wireguard.

Пытаюсь настроить обход блокировок по следующей схеме:

  1. xray работает как dns сервер, и для нужных доменов возвращает ip адреса из подсети 10.30.0.0
  2. роутер подключен к xray по wireguard, и пересылает запросы к 10.30.0.0 в этот интерфейс wg
  3. xray резолвит fake ip адреса в реальные домены, и делает запросы по правилам роутинга

Пункты 1-2 работают, а вот с пунктом 3 довести до ума не получается: xray не резолвит адреса обратно, и пытается делать запросы по ip адресам вида 10.30.100.60, из-за чего всё ломается.

config.json

{
“log”: {
“loglevel”: “info”
},

“dns”: {
“servers”: [
// Это мой домашний adguard home
{
“address”: “192.168.1.12”,
“port”: 6053
},
// Для примера несколько правил. DNS сервер работает отлично
{
“address”: “fakedns”,
“domains”: [
“domain:youtube.ru”,
“domain:2ip.ru”
]
}
]
},

“fakedns”: [
{
“ipPool”: “10.30.0.0/16”,
“poolSize”: 65535
}
],

“routing”: {
“domainStrategy”: “IPIfNonMatch”,
“rules”: [
{
“inboundTag”: [ “dns-input” ],
“outboundTag”: “dns-output”
},

  // Правила ниже не работают
  {
    "domain": ["domain:2ip.ru"],
    "outboundTag": "xray-amsterdam"
  },

  {
    "domain": ["domain:youtube.ru"],
    "outboundTag": "wg-russia"
  },

  // Это добавлял для тестов. Что с ним, что без него - не работает
  {
    "ip": ["10.30.0.0/16"],
    "outboundTag": "fakedns-resolver"
  }
]

},

“inbounds”: [
{
“tag”: “dns-input”,
“port”: 5053,
“network”: “udp”,
“protocol”: “dokodemo-door”,
“settings”: {
“address”: “192.168.1.12”,
“port”: 6053,
“network”: “udp”
},
“sniffing”: {
“enabled”: true,
“destOverride”: [“http”, “tls”, “fakedns”, “fakedns+others”],
“metadataOnly”: false
}
},

{
  "tag": "wg-in",
  "port": 51820,
  "protocol": "wireguard",
  "settings": {
    "secretKey": "<ключ>",
    "peers": [
      {
        "publicKey": "<ключ>",
        "allowedIPs": ["172.20.82.2/24"]
      }
    ]
  },
  "sniffing": {
    "enabled": true,
    "destOverride": [ "fakedns" ],
    "metadataOnly": true
  }
}

],

“outbounds”: [
{
“tag”: “direct”,
“protocol”: “freedom”
},

{
  "protocol": "dns",
  "tag": "dns-output",
  "settings": {
    "address": "192.168.1.12",
    "network": "udp",
    "port": 6053
  }
},

{
  "tag": "xray-amsterdam",
  "protocol": "vmess",
  "settings": {
    "vnext": [
      {
        "address": "<ip-адрес>",
        "port": 443,
        "users": [
          {
            "id": "<ключ>",
            "alterId": 0,
            "security": "auto"
          }
        ]
      }
    ]
  },
  "streamSettings": {
    "network": "ws",
    "wsSettings": {
      "path": "/xray"
    }
  }
},

{
  "tag": "wg-russia",
  "protocol": "wireguard",
  "settings": {
    "secretKey": "<ключ>",
    "address": [ "<адрес>" ],
    "dns": ["1.1.1.1"],
    "peers": [
      {
        "publicKey": "<ключ>",
        "presharedKey": "<ключ>",
        "endpoint": "<ip-адрес>",
        "allowedIPs": ["0.0.0.0/0", "::/0"],
        "keepAlive": 20
      }
    ]
  }
},

{
  "tag": "fakedns-resolver",
  "protocol": "freedom",
  "settings": {
    "domainStrategy": "UseIPv4"
  }
},

{
  "tag": "block",
  "protocol": "blackhole"
}

]
}

Возможно ли вообще через wg подключение резолвить fake ip адреса обратно в настоящие домены, чтобы через routing удобно перенаправлять трафик куда нужно?

попробуй тоже самое на sing-box

А sing-box ведь не умеет в wireguard inbound :thinking: там, видимо, можно через “tun” пойти и настроить туннель от роутера к sing-box. Ни у кого нет примера конфига готового?

Попробуйте для теста только fakedns+others в сниффере. Там есть какой-то косячок, сталкивался

UPD: я использую вариант без metadata

      "sniffing": {
        "enabled": true,
        "destOverride": ["fakedns+others"],
        "routeOnly": true
      }

sing-box example

{
    "dns": {
        "fakeip": {
            "enabled": true,
            "inet4_range": "198.18.0.0/15"
        },
        "independent_cache": true,
        "rules": [
            {
                "query_type": [
                    "SRV",
                    "HTTPS",
                    "NIMLOC"
                ],
                "server": "block"
            },
            {
                "domain_keyword": [
                    "tiktok",
                    "spotify",
                    "bing",
                    "copilot",
                    "discord"
                ],
                "domain_suffix": [
                    "4pda.to",
                    "ua",
                    "speedtest.selectel.ru",
                    "googlevideo.com",
                    "youtube.com",
                    "ytimg.com",
                    "ggpht.com",
                    "chatgpt.com",
                    "oaistatic.com",
                    "oaiusercontent.com",
                    "intercomcdn.com",
                    "openai.com",
                    "gemini.google.com",
                    "scdn.co",
                    "ttwstatic.com",
                    "2ip.me",
                    "voidboost.cc",
                    "notion.so",
                    "notion.com",
                    "splunkcloud.com"
                ],
                "query_type": [
                    "A",
                    "AAAA"
                ],
                "rule_set": "antizapret",
                "server": "remote"
            }
        ],
        "servers": [
            {
                "address": "76.76.2.2",
                "strategy": "prefer_ipv6",
                "tag": "local"
            },
            {
                "address": "fakeip",
                "strategy": "ipv4_only",
                "tag": "remote"
            },
            {
                "address": "rcode://success",
                "tag": "block"
            }
        ]
    },
    "inbounds": [
        {
            "address": "172.19.0.1/30",
            "domain_strategy": "prefer_ipv6",
            "interface_name": "singtun",
            "mtu": 1500,
            "sniff": true,
            "tag": "tun",
            "type": "tun"
        },
        {
            "listen": "10.123.0.1",
            "listen_port": 53,
            "sniff": true,
            "tag": "dns-in",
            "type": "direct"
        }
    ],
    "log": {
        "disabled": true,
        "level": "info"
    },
    "outbounds": [
        {
            "tag": "direct",
            "type": "direct"
        },
        {
            "tag": "dns-out",
            "type": "dns"
        },
        {
            "tag": "block",
            "type": "block"
        }
    ],
    "route": {
        "rule_set": [
            {
                "format": "binary",
                "tag": "antizapret",
                "type": "remote",
                "url": "https://github.com/savely-krasovsky/antizapret-sing-box/releases/latest/download/antizapret.srs"
            }
        ],
        "rules": [
            {
                "ip_cidr": [
                    "192.168.0.0/16",
                    "10.0.0.0/8",
                    "198.18.0.0/15",
                    "172.19.0.0/24",
                    "127.0.0.0/16"
                ],
                "outbound": "block"
            },
            {
                "outbound": "dns-out",
                "protocol": "dns"
            }
        ]
    }
}

cat /etc/systemd/network/2-singtun.network

[Match]
Name=singtun

[Network]
Address=172.19.0.1/30

[Route]
Destination=198.18.0.0/15

Пробовал разные варианты, не помогло, к сожалению

Спасибо, попробую sing-box. Отпишусь по результатам

Интересуюсь таким же сетапом.
В бета версии sing-box 1.11.0 добавили endpoint Wireguard. Он позволяет работать как на inbound, так и outbound.

Вот мой пример:

"endpoints": [
    {
        "type": "wireguard",
        "tag": "wg-ep",
        "system": true,
        "address": [
            "10.10.10.1/24"
        ],
        "private_key": "",
        "listen_port": 51820,
        "peers": [
            {
                "public_key": ",
                "allowed_ips": [
                    "10.10.10.2/32"
                ]
            }
        ]
    }
],

К сожалению, полностью настроить конфиг у меня не получилось.
Если получится у вас, то прошу поделиться :slight_smile: