Linux双网卡为何无法直接通信?

通信原理

Linux网卡通信依赖三个核心机制:

  1. IP地址与子网掩码
    每张网卡需配置独立的IP地址(如eth0: 168.1.10/24,eth1: 0.0.10/24),子网掩码定义网段范围,决定数据包是否需路由转发。
  2. 路由表
    系统通过路由表判断数据流向,查看命令:ip route show

    • 直连路由:同网段通信直接发送(如168.1.0/24 dev eth0)。
    • 默认路由:跨网段流量走网关(如default via 192.168.1.1 dev eth0)。
  3. 内核转发功能
    跨网卡通信需启用IP转发:

    echo 1 > /proc/sys/net/ipv4/ip_forward  # 临时生效

    永久生效需修改/etc/sysctl.conf

    net.ipv4.ip_forward = 1

配置步骤(以eth0和eth1为例)

场景1:同设备双网卡互访

目标:eth0(192.168.1.10/24)与eth1(10.0.0.10/24)直接通信。

  1. 配置IP地址
    ip addr add 192.168.1.10/24 dev eth0
    ip addr add 10.0.0.10/24 dev eth1
  2. 添加直连路由(通常自动生成)
    验证:ip route show 应显示两条直连路由。
  3. 禁用源验证(避免RPF过滤)
    sysctl -w net.ipv4.conf.all.rp_filter=0

场景2:跨网段路由

目标:PC1(eth0网段)通过Linux主机访问PC2(eth1网段)。

  1. Linux主机配置
    • 启用IP转发(见前文)。
    • 添加SNAT(源地址转换)使回程流量可达:
      iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
  2. PC1路由设置
    指向Linux的eth0 IP为网关:

    ip route add 10.0.0.0/24 via 192.168.1.10
  3. PC2路由设置
    指向Linux的eth1 IP为网关:

    ip route add 192.168.1.0/24 via 10.0.0.10

关键问题排查

  1. 网卡未激活
    ip link set eth0 up  # 启用网卡
  2. 防火墙拦截
    放行流量:

    iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
  3. 路由缺失
    手动添加路由:

    ip route add 10.0.0.0/24 dev eth1
  4. ARP缓存问题
    清除ARP缓存:

    ip neigh flush all

高级应用

  • 策略路由:基于源IP选择不同路由表
    ip rule add from 192.168.1.10 lookup table100
    ip route add default via 10.0.0.1 dev eth1 table100
  • NetworkManager配置
    编辑/etc/NetworkManager/system-connections/下网卡配置文件,添加ipv4.method=manual和静态IP。

安全与优化建议

  1. 隔离生产/管理流量:将eth0用于公网,eth1用于内网管理。
  2. 绑定MAC地址:防止ARP欺骗:
    arp -s 192.168.1.1 00:11:22:33:44:55
  3. 监控流量
    nethogs eth0 eth1  # 实时流量监控

Linux双网卡通信的核心在于正确配置IP地址、路由表、内核转发及防火墙规则,同网段通信依赖直连路由,跨网段需结合网关和NAT,通过iproute2工具和iptables可灵活控制数据流向,满足复杂网络架构需求。

引用说明基于Linux内核文档(kernel.org)、iproute2官方手册及Red Hat网络配置指南,实践环境为Ubuntu 22.04/CentOS 8,理论适用于所有主流Linux发行版。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9200.html

(0)
酷番叔酷番叔
上一篇 2025年7月29日 15:45
下一篇 2025年7月29日 15:56

相关推荐

  • Linux如何彻底杀死僵尸进程?

    在Linux系统中,僵尸进程(Zombie Process)是指子进程已完成执行,但其父进程未通过wait()或waitpid()系统调用来回收其进程描述符(PCB,Process Control Block),导致子进程处于“已终止但未释放”的状态,这类进程不占用CPU资源,但会占用PID(进程ID),当系统……

    2025年9月30日
    11400
  • Linux如何进入救援模式?

    Linux救援模式是系统无法正常启动时进行故障修复的重要工具,通常用于修复文件系统错误、恢复丢失的配置、重置用户密码或重新安装引导程序等场景,不同Linux发行版的救援模式进入方式略有差异,但核心逻辑相似,均需通过引导加载程序(如GRUB)启动时指定特殊参数或选择菜单选项进入,以下以主流发行版为例,详细介绍进入……

    2025年10月1日
    14800
  • 如何删除linux软链接

    rm命令删除Linux软链接,如rm 软链接名。

    2025年8月10日
    15400
  • 网卡不见了?试试ip link命令

    在Linux系统中,MAC地址(Media Access Control Address)是网络接口的唯一硬件标识符,由48位二进制数组成,通常表示为12位十六进制数(如00:1A:2B:3C:4D:5E),它用于在局域网中精确识别设备,对网络配置、故障排查、安全策略(如MAC地址过滤)至关重要,以下是在RHE……

    2025年7月29日
    13000
  • Linux如何查看解压密码?

    在Linux系统中,查看加密压缩包的密码并没有直接的“一键查看”命令,因为压缩包的密码是通过加密算法保护的,无法直接读取明文,可以通过多种工具和方法尝试破解或找回密码,具体取决于压缩包的格式(如zip、7z、rar等)和已知信息,以下是详细的操作方法和工具介绍,常见压缩格式及密码破解工具不同格式的压缩包需使用对……

    2025年10月6日
    12900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信