双网卡机器配置说明

本文介绍了一种解决双网卡服务器中响应数据包被错误路由的问题的方法。通过使用iptables和CONNMARK模块来标记从特定网卡接收的数据包,并通过策略路由确保这些数据包从正确的网卡发送出去。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在杭州机房里有一部分机器拥有双网卡,双IP,这种机器的网络需要特殊配置。

 

例如:客服工作台有一台机器有两块网卡,分别是 公网ip 223.5.20.36(eth0) 和 内网ip 192.168.220.41(eth1)。

需要注意的是,这台机器的网关是 192.168.0.1。这会导致一个问题,当一个外部请求访问它的公网地址 223.5.20.36 时,响应数据包会从内部网络接口 eth1 出去。请求端接受到的包的源 ip 就不再是 223.5.20.36 了,这种情况响应包通常会被直接丢弃,导致通信失败。

 

解决这个问题有两种方法:

1. 简单直接的方式:把网关设置为公网ip的网关, 如 223.5.20.1。   

2. 但假如处于某些原因,不想更改网关。还有一种比较麻烦一些的方式:iptables的CONNMARK模块 + 策略路由。具体实现如下:

 

a.首先是给 所有 从公网接口eth0进来的包都打上一个标记(fwmark)。

iptables -A INPUT -i eth0 -d 223.5.20.36 -j CONNMARK --set-mark 1

注:实际上只需要对一次连接的第一个包打标记就行,即下面这样也行:

iptables -A INPUT -i eth0 -d 223.5.20.36 -m state --state NEW -j CONNMARK --set-mark 1

 

b.当响应数据包返回时,利用connmark的连接追踪功能给响应包也打上相同的标记。

iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark

注:必需在 mangle 表执行 connmark 标记恢复。因为在mangle表之后会进行一次 reroute check 重新路由,这使得下一步得以发生。

 

c.配置策略路由,让打了标记(fwmark 1)的包全部走 eth0 接口。

echo 200 public >> /etc/iproute2/rt_tables

ip rule add table public

ip route add table public default via 223.5.20.1 dev eth0                               本文转自 Bruceweien 51CTO博客,原文链接:http://blog.51cto.com/bruceweien/1932409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值