温馨提示×

centos rust网络配置怎么做

小樊
37
2025-11-15 19:41:52
栏目: 编程语言

CentOS 上 Rust 相关的网络配置指南

一 系统网络先行

  • 查看网卡与状态
    • 执行:nmcli device status,确认网卡名称(如 ens33/ens37/enp0s3)与状态。
  • 使用 nmtui 配置上网(DHCP)
    • 执行:nmtui → “Edit a connection” → 选网卡 → IPv4 选择 Automatic → 勾选 Automatically connect → OK → 回到终端执行 systemctl restart NetworkManager
  • 配置静态 IP(示例)
    • 编辑:vi /etc/sysconfig/network-scripts/ifcfg-ens3,设置
      • BOOTPROTO=static
      • ONBOOT=yes
      • IPADDR=192.168.0.55
      • NETMASK=255.255.255.0
      • GATEWAY=192.168.0.1
    • 编辑:/etc/resolv.conf,添加 nameserver 8.8.8.8nameserver 8.8.4.4
    • 使配置生效:systemctl restart NetworkManager
  • 验证
    • ip addrping -c 4 8.8.8.8ping -c 4 your-gateway
      以上步骤适用于 CentOS/RHEL/Rocky 最小化安装环境,使用 NetworkManager、nmcli、nmtui 完成网络与 DNS 配置。

二 作为 Rust 开发环境的网络要点

  • 安装 Rust 工具链(国内镜像加速)
    • 设置镜像环境变量后安装:
      • export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
      • export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
      • source /etc/profile
      • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • 验证:rustc -Vcargo -V
  • 安装构建依赖
    • yum install -y gcc(Rust 编译部分包需要本地 C 编译器)
      以上步骤确保 Rust 与 Cargo 正确安装,便于后续网络程序开发与运行。

三 编写与运行 Rust 网络程序

  • 同步 TCP 回显服务器(std::net)
    • Cargo.toml(无需额外依赖)
    • src/main.rs
      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(())
      }
      
  • 异步 TCP 回显服务器(tokio)
    • Cargo.toml
      [dependencies]
      tokio = { version = "1", features = ["full"] }
      
    • src/main.rs
      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 run
    • 本机测试:nc 127.0.0.1 8080telnet 127.0.0.1 8080
    • 远程测试:在另一台机器执行 nc <服务器IP> 8080;如失败,检查 firewalld/iptables 是否放行 8080/tcp
      以上示例覆盖 std::nettokio 两种常见路径,便于按场景选择同步或异步实现。

四 多网卡与跨网卡通信

  • 列出网卡与 MAC
    • ip link 查看接口名与 MAC(如 enp0s8enp0s9)。
  • 数据链路层直连示例(pnet)
    • 在同一台 CentOS 上,用 pnet 在两块网卡间发送以太网帧(以对方 MAC 为目的)。示例思路:
      • 使用 pnet_datalink::interfaces() 找到发送与接收网卡;
      • 通过 channel(&iface, Default::default()) 获取发送/接收通道;
      • 构造 MutableEthernetPacket,设置 set_destination(mac)set_source(interface.mac)set_ethertype(EtherTypes::Ipv4)
      • 发送后在两端抓包可见以太网帧往返。
  • 说明
    • 这属于二层转发/打洞思路,常用于测试或特定网络功能;生产跨网段通信通常依赖三层路由/网关。
      以上方法基于 pnetCentOS 7 环境实现跨网卡以太网帧通信,便于理解二层直连与 MAC 寻址。

五 进阶 路由转发与 DHCP 中继

  • 开启 IP 转发(作为网关/中继时)
    • 编辑:/etc/sysctl.conf,添加 net.ipv4.ip_forward = 1
    • 生效:sysctl -p
  • DHCP 中继(跨网段分发地址)
    • 安装:yum install -y dhcp
    • 启用服务:systemctl start dhcrelay && systemctl enable dhcrelay
    • 按需配置转发接口与目标 DHCP 服务器(具体命令行参数依网络拓扑与版本而定)。
      以上为常见网关/中继场景的系统侧配置,常与容器、虚拟化或多网段实验配合使用。

0