首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iptables:未通过配置路由路由的标记数据包

iptables:未通过配置路由路由的标记数据包
EN

Server Fault用户
提问于 2019-03-23 21:43:55
回答 1查看 237关注 0票数 0

我需要配置一个防火墙服务器,包括两个互联网线路( eth1上的A,eth0上的B)和内部网络(eth2上的C)。除了默认路由表(通过A/ eth1),我还有两个路由表,每个路由表都有自己的默认网关。

我可以到达服务器通过互联网线A和SSH端口22,如预期。但当我试图通过互联网线路B到达时,返回的tcp/ip数据包是通过因特网线路A发送的。

显然,当我通过互联网线路B连接到服务器时,我希望它通过因特网线路B进行回复。

我怎样才能做到这一点?

到目前为止,我尝试过的是:我配置了sshd,以便它侦听第二个端口(122)。然后我添加了一个

代码语言:javascript
复制
#!/bin/bash

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
ip rule add from all fwmark 1 table 2

ip route flush cache
iptables -A OUTPUT -p tcp --sport 122 -j LOG
iptables -A OUTPUT -t mangle -p tcp --sport 122 -j MARK --set-mark 1

现在,我可以通过因特网线路B连接到服务器,但是答案被记录下来通过因特网线A返回。

到目前为止,我也尝试过:

我可以控制内部网络C中其他计算机产生的流量,通过因特网线路A或B发送--只需在预测表中标记它们的数据包:

代码语言:javascript
复制
$A -t mangle -A PREROUTING -p tcp --dport 80 -s 192.168.0.0/24 -j MARK --set-mark 2

这个效果很好。

EN

回答 1

Server Fault用户

发布于 2019-05-14 10:57:15

您的设置需要使用PBR (基于策略的路由)。你在用它,但还不完整。您可以通过两种方式解决问题:

  • 简单的方法:为每个上行链路添加两个规则,比如ip rule add from <srv-IP-A> table <tbl-A> pref 1001ip rule add from <src-IP-B> table <tbl-B> pref 1002,其中AB是对应的链接。它只适用于来自服务器本身的通信,因为它总是从初始连接请求接收到的相同ip地址进行答复。
  • 难的方法:使用CONNMARK目标。它适用于所有情况。逻辑:连接轨迹条目与连接相关联,并且可能在其内部包含一个附加值。您可以将此值克隆到/从防火墙标记中复制,并在iptables规则中使用匹配。
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/959661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档