linux路由或使用环回接口上的ip作为别名

我有

eth0:0 192.168.2.10 (for bgp network announce, no vlan, alias on eth0) eth0.1 192.168.3.20 (for bgp session 1,vlan3 transport to bgp router) eth0.2 192.168.4.30 (for bgp session 2,vlan4 transport to bgp router) 

默认路由由斑马(192.168.3.1或192.168.4.1 – 故障切换)

当外部IP(192.168.1.100)试图连接到192.168.2.10 – >应答的数据包通过192.168.3.1(其中源IP为192.168.3.20)。 这工作正确。 但是我想源地址是192.168.2.10。 主要问题是当星号在192.168.2.10上运行时,客户端试图从192.168.1.100注册sip – >从192.168.3.20发送回答,而软件包被丢弃在远端。

如何解决/解决这个问题? 还是有其他方式的configuration界面? 主要思想是切换路由为192.168.2.10如果一个bgp会话closures。

 rp_filter=0 on all interfaces 

如果我把这样的东西:

 iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 192.168.5.58 

这也不起作用。

所有的问题是星号在这个scheme后面是nat。 如果我在所有接口上运行它 – > SIP客户端连接上192.168.4.30和192.168.3.20 IP的确定,但不是192.168.2.10之一。

在Linux上与Linux上的环回不一样。

在Linux上分配给任何地址的地址必须仅用于机器向其自身发送stream量; 内核会认为任何包含一个源IP的数据包与一个分配给火星的数据包相匹配,并将在入口处被丢弃 – 这是硬编码的行为。 内核偶然也使用lo来发送stream量到自己的任何其他接口上的IP(例如,如果eth0有10.0.0.1并且你ping了它,lo上的tcpdump会显示回显请求和回复)

对于思科types的回送接口,使用“虚拟”内核模块 – 请注意,假模块也可以作为stream量路由到它的通道(如思科的null0),因此您分配的任何地址它应该是/ 32,因为显然没有什么东西会在虚拟接口上连接。

lo接口上放置非环回地址势必造成怪异。 我build议你把eth0附加192.168.2.10。