close to final of fake ip resolving

This commit is contained in:
2026-03-08 00:11:52 +07:00
parent b1cc4c14f4
commit 8bad1b0162
8 changed files with 91 additions and 42 deletions
+42 -3
View File
@@ -46,16 +46,55 @@ impl Tun {
pub fn setup_routing(&self) -> io::Result<()> {
use std::process::Command;
// Теперь, когда мы знаем, что tun0 имеет IP 10.0.0.1,
// мы можем смело ставить его шлюзом.
// 1. Удаляем существующий default-маршрут (чтобы не было конфликтов)
// Игнорируем ошибку, если его вдруг нет
let _ = Command::new("sudo")
.args(&["ip", "route", "del", "default"])
.status();
// 1. Устанавливаем маршрут через созданный интерфейс tun0
// 2. Добавляем tun0 как ГЛАВНЫЙ маршрут (метрика 1 — самый высокий приоритет)
let _ = Command::new("sudo")
.args(&[
"ip", "route", "add", "default", "via", "10.0.0.2", "dev", "tun0", "metric", "1",
])
.status();
// 3. Добавляем eth0 как РЕЗЕРВНЫЙ маршрут (метрика 100 — низкий приоритет)
// ВАЖНО: Тебе нужно знать IP шлюза твоего eth0.
// Если ты не знаешь его заранее, можешь попробовать вытащить его из `ip route`
// или просто оставить как есть, если eth0 — единственный физический интерфейс.
let _ = Command::new("sudo")
.args(&[
"ip",
"route",
"add",
"default",
"via",
"172.18.144.1",
"dev",
"eth0",
"metric",
"100",
])
.status();
info!(
"Маршрутизация настроена: tun0 (metric 1) -> основной, eth0 (metric 100) -> резервный"
);
Ok(())
}
pub fn setup_dns_redirection(&self) -> io::Result<()> {
// 1. Создаем временный файл resolv.conf
// Мы говорим системе: "Твой DNS-сервер теперь 10.0.0.1" (твой TUN-IP)
let _ = std::fs::write("/tmp/resolv.conf.netrunner", "nameserver 10.0.0.2\n");
// 2. Применяем его (для Linux/systemd)
let _ = std::process::Command::new("sudo")
.args(&["cp", "/tmp/resolv.conf.netrunner", "/etc/resolv.conf"])
.status();
info!("DNS перенаправлен на 10.0.0.1");
Ok(())
}
}