dns and handler updates

This commit is contained in:
2026-03-17 15:04:45 +07:00
parent bf6e621f14
commit 25d7e8b290
4 changed files with 83 additions and 43 deletions
+22 -13
View File
@@ -68,22 +68,29 @@ pub fn setup_platform_routing(remote_address: &str) -> io::Result<()> {
#[cfg(target_os = "linux")]
{
// 1. Предварительная настройка ядра (rp_filter и пересылка)
// 1. Ядро
let _ = run_cmd_ext("sysctl -w net.ipv4.conf.all.rp_filter=0", true);
let _ = run_cmd_ext("sysctl -w net.ipv4.conf.netr0.rp_filter=0", true);
let _ = run_cmd_ext("sysctl -w net.ipv4.ip_forward=1", true);
// 3. Маршрутизация (игнорируем ошибки, если правила уже есть)
// 2. Маршрутизация
let _ = run_cmd_ext("ip rule add fwmark 0x1 table 100", true);
let _ = run_cmd_ext("ip route add default dev netr0 table 100", true);
// 4. NFTables
let _ = run_cmd_ext("nft delete table ip netrunner", true);
run_cmd_ext("nft add table ip netrunner", false)?;
// 3. NFTables (Чиним ошибку удаления и синтаксис)
// Добавляем таблицу (если есть — ничего не сделает, если нет — создаст)
run_cmd_ext("nft add table ip netrunner", true)?;
// Очищаем таблицу перед работой, чтобы не плодить дубликаты
run_cmd_ext("nft flush table ip netrunner", true)?;
run_cmd_ext(
"nft add chain ip netrunner output { type route hook output priority 0; }",
false,
)?;
run_cmd_ext(
"nft add chain ip netrunner nat_out { type nat hook output priority -100; }",
false,
)?;
let mark_rule = format!(
"nft add rule ip netrunner output ip daddr != {} oifname != \"netr0\" mark set 0x1",
@@ -91,15 +98,17 @@ pub fn setup_platform_routing(remote_address: &str) -> io::Result<()> {
);
run_cmd_ext(&mark_rule, false)?;
// 5. DNS
let _ = Command::new("resolvectl")
.args(["dns", "netr0", "10.0.0.2"])
.status();
let _ = Command::new("resolvectl")
.args(["domain", "netr0", "~."])
.status();
let dns_redir = format!(
"nft add rule ip netrunner nat_out udp dport 53 ip daddr != {} dnat to 10.0.0.2:53",
proxy_ip
);
run_cmd_ext(&dns_redir, false)?;
info!("Linux network auto-configured: RPF=0, MTU=1280, Rules active.");
// 4. DNS (resolvectl не знает 'metric', используем стандартный синтаксис)
let _ = run_cmd_ext("resolvectl dns netr0 10.0.0.2", true);
let _ = run_cmd_ext("resolvectl domain netr0 ~.", true);
info!("Linux network: NFTables flushed and re-configured.");
}
#[cfg(target_os = "windows")]
{