close to final of fake ip resolving
This commit is contained in:
+42
-3
@@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user