通信原理
Linux网卡通信依赖三个核心机制:
- IP地址与子网掩码
每张网卡需配置独立的IP地址(如eth0:168.1.10/24
,eth1:0.0.10/24
),子网掩码定义网段范围,决定数据包是否需路由转发。 - 路由表
系统通过路由表判断数据流向,查看命令:ip route show
。- 直连路由:同网段通信直接发送(如
168.1.0/24 dev eth0
)。 - 默认路由:跨网段流量走网关(如
default via 192.168.1.1 dev eth0
)。
- 直连路由:同网段通信直接发送(如
- 内核转发功能
跨网卡通信需启用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)直接通信。
- 配置IP地址
ip addr add 192.168.1.10/24 dev eth0 ip addr add 10.0.0.10/24 dev eth1
- 添加直连路由(通常自动生成)
验证:ip route show
应显示两条直连路由。 - 禁用源验证(避免RPF过滤)
sysctl -w net.ipv4.conf.all.rp_filter=0
场景2:跨网段路由
目标:PC1(eth0网段)通过Linux主机访问PC2(eth1网段)。
- Linux主机配置
- 启用IP转发(见前文)。
- 添加SNAT(源地址转换)使回程流量可达:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
- PC1路由设置
指向Linux的eth0 IP为网关:ip route add 10.0.0.0/24 via 192.168.1.10
- PC2路由设置
指向Linux的eth1 IP为网关:ip route add 192.168.1.0/24 via 10.0.0.10
关键问题排查
- 网卡未激活
ip link set eth0 up # 启用网卡
- 防火墙拦截
放行流量:iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
- 路由缺失
手动添加路由:ip route add 10.0.0.0/24 dev eth1
- 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。
安全与优化建议
- 隔离生产/管理流量:将eth0用于公网,eth1用于内网管理。
- 绑定MAC地址:防止ARP欺骗:
arp -s 192.168.1.1 00:11:22:33:44:55
- 监控流量:
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