使用与传入相同的源 IP 地址进行回复?

使用与传入相同的源 IP 地址进行回复?

我的系统在同一接口上有两个不同的 IP 地址。两个 IP 连接到同一网络。其中之一设置为默认路由;这样做的副作用是,如果数据包通过非默认路由 IP 进入,则回复将通过默认路由接口发回。有办法解决这个问题吗?我期望响应是从与请求来源相同的 IP 地址发送的。

输出ip address

`5: eth-access: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 96:52:79:33:7a:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.12/28 scope global eth-access
       valid_lft forever preferred_lft forever
    inet 192.168.0.13/28 scope global secondary eth-access
       valid_lft forever preferred_lft forever `

以下是使用错误源 IP 的 SNMP 请求详细信息。请求来自 IP“13”,但应答来自“12”:

17:55:24.692149 IP (tos 0x0, ttl 63, id 35960, offset 0, flags [DF], proto UDP (17), length 76)
    192.168.0.116.55421 > 192.168.0.13.161:  { SNMPv2c C="Test" { GetNextRequest(26) R=361171477  .1.3.6.1.2.1.1 } }
17:55:24.693519 IP (tos 0x0, ttl 64, id 22807, offset 0, flags [DF], proto UDP (17), length 133)
    192.168.0.12.161 > 192.168.0.116.55421:  { SNMPv2c C="Test" { GetResponse(83) R=361171477  .1.3.6.1.2.1.1.1.0="SunOS Node1 5.11 pn-tpOS-2.6.1-2060112460 i86pc" } }

为了解决这个问题,我为“13”ip 创建了单独的 ip 表。但它并没有解决问题。

echo 252 snmp >> /etc/iproute2/rt_tables
ip rule add from 192.168.0.13 table snmp
ip route add default via 1192.168.0.1 dev eth-access src 192.168.0.13 table snmp
ip route add 192.168.0.0/28 dev eth-access src 192.168.0.13 table snmp

这是系统的输出:

# ip rule list
0:      from all lookup local
32765:  from 192.168.0.13 lookup snmp
32766:  from all lookup main
32767:  from all lookup default

# ip route list table snmp
default via 192.168.0.1 dev eth-access  src 192.168.0.13
192.168.0.0/28 dev eth-access  scope link  src 192.168.0.13

有什么方法可以确保使用与请求中相同的源 IP 地址。如果我们在一个接口上有来自同一子网的两个 IP。

编辑:为了澄清:我需要确保该服务器使用与请求的目标 IP 相同的源 IP 来回复请求。即,如果请求来自目标 IP 192.168.0.13,则响应应为源 IP 192.168.0.13。当前,当请求来自 IP 地址 192.168.0.13 时,对 SNMP 请求的响应将使用 IP 地址 192.168.0.12 作为源 IP。

编辑:解决方案最后,我意识到我正在执行此测试的工具能够接受此响应。为了进行测试,我使用来自另一台服务器的 SNMPwalk 命令,该服务器不接受响应。 (我假设是因为源地址不同)。但实际的 SNMP 工具似乎更慷慨,并且在我这边接受了响应,没有进行任何更改。我不确定这是如何工作的,但想分享一下。感谢大家的帮助。

相关内容