4个版本
0.1.5 | 2023年8月31日 |
---|---|
0.1.3 | 2023年8月31日 |
0.1.2 |
|
0.1.1 | 2023年8月26日 |
0.1.0 | 2023年8月26日 |
265 in 操作系统
24KB
384 行
Tun Route Daemon
一个Rust crate,提供管理TUN设备路由和配置的工具。
使用方法
-
编译:确保您的系统已安装Rust。克隆仓库并导航到项目目录。
-
构建守护进程:使用以下命令构建守护进程
cargo build --release
-
运行守护进程:要运行守护进程,提供所需的参数
tun_device_name
和tun_device_ip
。例如./target/release/tun-dev-daemon tun0 192.168.1.2
将
tun0
替换为实际的TUN设备名称,将192.168.1.2
替换为您希望的IP地址。 -
工作流程:守护进程遵循以下ASCII艺术图示中概述的工作流程。它初始化,检查TUN设备,存储旧路由,设置特定和默认路由,监控TUN设备,并在必要时恢复更改。
-
停止守护进程:要停止守护进程,请在运行守护进程的终端中按Ctrl+C。
请确保您有修改路由和与网络配置交互的必要权限。守护进程将根据提供的流程处理路由更改。
守护进程工作流程
+-------+ +-------------------+
| Start |------------>| Initialize Daemon |
+-------+ +-------------------+
|
v
+--------------------------------------+
| Receive 'tun device name' and 'tun |
| device connection IP address' |
+--------------------------------------+
|
v
+------------------------+
| Check Tun Device |
| Existence |
+------------------------+
|
+--------+---------+
| |
| |
v v
+-------------------+ +-----------------+
| Store Old Default | | Log an error and|
| Route | | exit or retry |
+-------------------+ +-----------------+
|
v
+-------------------+
| Set Specific Route|
+-------------------+
|
v
+-------------------+
| Set Default Route |
+-------------------+
|
v
+-------------------+
| Monitor Tun Device|
+-------------------+
|
+---------+----------+
| |
v v
+----------------------+ +------------------+
| Revert to Old Default| | Keep Monitoring |
| Route | +------------------+
+----------------------+
|
v
+----------------------+
| Remove Specific Route |
+----------------------+
|
v
+----------------------+
| Stop |
+----------------------+
示例用法
use std::env;
use std::io::Result;
use tun_route_daemon::route_utils as tun_route_utils;
#[tokio::main]
async fn main() -> Result<()> {
// Parse command-line arguments for 'tun_device_name' and 'tun_device_ip'
let args: Vec<String> = env::args().collect();
if args.len() < 3 {
println!("Usage: {} <tun_device_name> <tun_device_ip>", args[0]);
return Ok(());
}
let tun_device_name = &args[1];
let tun_device_ip = &args[2];
// Run the daemon logic using the run_daemon function
if let Err(err) = tun_route_utils::run_daemon(tun_device_name, tun_device_ip).await {
eprintln!("Error: {}", err);
}
Ok(())
}
有关更多详细信息和高级用法,请参阅文档和源代码。
依赖项
~7–17MB
~218K SLoC