linux双网卡指定服务出口IP
时间: 2025-01-21 17:44:20 浏览: 82
### 配置Linux服务器上的双网卡以指定服务使用的出口IP
为了使特定的服务通过不同的网卡发送流量,在Linux系统中可以采用基于策略的路由(Policy Based Routing)。这涉及到创建额外的路由表以及定义相应的规则。
#### 创建自定义路由表
编辑`/etc/iproute2/rt_tables`文件,向其中添加新的条目用于区分不同用途的路由表:
```bash
echo "100 tableA" >> /etc/iproute2/rt_tables
echo "101 tableB" >> /etc/iproute2/rt_tables
```
这里假设tableA对应于第一个网卡而tableB则关联到第二个网卡[^1]。
#### 设置静态路由
对于每张网卡都需要设定独立的默认网关。例如如果要让eth0作为主要连接,则可以在其对应的配置脚本里加入如下命令;而对于次要连接即eth1来说同样操作但是指向另一个网关地址[^3]。
针对上述提到的例子中的具体IP分配情况(192.168.10.83 和 172.16.100.152),可以通过下面的方式来进行设置:
```bash
ip route add default via GATEWAY_A dev eth0 table tableA
ip route add default via GATEWAY_B dev eth1 table tableB
```
这里的GATEWAY_A和GATEWAY_B分别是两个网卡所连通网络下的默认网关地址[^4]。
#### 添加源地址选择规则
为了让来自某个特定子网的数据包能够按照预设路径转发出去,还需要增加一些规则来指导内核如何处理这些数据流。比如当目标主机位于本地局域网内部时应优先考虑直连链路而不是经过外部路由器转接等情形下就需要这样做。
对于想要强制某些应用程序或进程使用固定的公网IP对外通信的情况而言,最简单的方法就是依据它们绑定监听端口所属范围内的私有IPv4段落来做决定——也就是说只要知道该应用通常占用哪个区间内的TCP/UDP port number就可以据此制定相应策略了。
以下是为每个网卡建立规则的具体方法:
```bash
ip rule add from 192.168.10.83 lookup tableA
ip rule add from 172.16.100.152 lookup tableB
```
这意味着任何源自这两个IP之一的数据都将遵循之前定义好的专属路线图进行传输。
#### 应用程序级别的控制
有时可能需要更细粒度地管理哪些服务会经由哪一个物理接口发出请求。这时便可以用iptables配合conntrack模块实现此目的。例如,若希望SSH客户端总是利用eth0发起远程登录尝试的话,可执行下列指令完成这项工作:
```bash
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 1
ip rule add fwmark 1 lookup tableA
```
这段代码片段的作用在于标记所有从ssh守护进程中产生的外出连接,并将其导向至先前已经准备完毕的那个名为tableA的表格当中去查找匹配项以便最终确定实际走哪条线路送出机房之外[^2]。
以上就是在Linux平台上实施多网卡环境下精确调控各业务逻辑单元间通讯行为的一种可行方案概述。
阅读全文