CentOS 上 Rust 相关的网络配置指南
一 系统网络先行
nmcli device status,确认网卡名称(如 ens33/ens37/enp0s3)与状态。nmtui → “Edit a connection” → 选网卡 → IPv4 选择 Automatic → 勾选 Automatically connect → OK → 回到终端执行 systemctl restart NetworkManager。vi /etc/sysconfig/network-scripts/ifcfg-ens3,设置
BOOTPROTO=staticONBOOT=yesIPADDR=192.168.0.55NETMASK=255.255.255.0GATEWAY=192.168.0.1/etc/resolv.conf,添加 nameserver 8.8.8.8、nameserver 8.8.4.4systemctl restart NetworkManagerip addr、ping -c 4 8.8.8.8、ping -c 4 your-gateway二 作为 Rust 开发环境的网络要点
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-staticexport RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustupsource /etc/profilecurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shrustc -V、cargo -Vyum install -y gcc(Rust 编译部分包需要本地 C 编译器)三 编写与运行 Rust 网络程序
use std::io::{Read, Write};
use std::net::{TcpListener, TcpStream};
fn handle_client(mut stream: TcpStream) -> std::io::Result<()> {
let mut buf = [0; 1024];
loop {
let n = stream.read(&mut buf)?;
if n == 0 { return Ok(()); }
stream.write_all(&buf[..n])?;
}
}
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("0.0.0.0:8080")?;
println!("Listening on 0.0.0.0:8080");
for stream in listener.incoming() {
let stream = stream?;
std::thread::spawn(move || { let _ = handle_client(stream); });
}
Ok(())
}
[dependencies]
tokio = { version = "1", features = ["full"] }
use tokio::net::{TcpListener, TcpStream};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("0.0.0.0:8080").await?;
println!("Listening on 0.0.0.0:8080");
loop {
let (mut socket, addr) = listener.accept().await?;
println!("New connection from {:?}", addr);
tokio::spawn(async move {
let mut buf = [0; 1024];
loop {
let n = match socket.read(&mut buf).await {
Ok(0) => return,
Ok(n) => n,
Err(e) => { eprintln!("read: {}", e); return; }
};
if let Err(e) = socket.write_all(&buf[..n]).await {
eprintln!("write: {}", e); return;
}
}
});
}
}
cargo runnc 127.0.0.1 8080 或 telnet 127.0.0.1 8080nc <服务器IP> 8080;如失败,检查 firewalld/iptables 是否放行 8080/tcp。四 多网卡与跨网卡通信
ip link 查看接口名与 MAC(如 enp0s8、enp0s9)。pnet_datalink::interfaces() 找到发送与接收网卡;channel(&iface, Default::default()) 获取发送/接收通道;MutableEthernetPacket,设置 set_destination(mac)、set_source(interface.mac)、set_ethertype(EtherTypes::Ipv4);五 进阶 路由转发与 DHCP 中继
/etc/sysctl.conf,添加 net.ipv4.ip_forward = 1sysctl -pyum install -y dhcpsystemctl start dhcrelay && systemctl enable dhcrelay