如何指定端口到指定的 interfaces 输出?
- 0次
- 2021-07-02 19:10:57
- idczone
比如我有 eth0 、 eth1 、 eth2 三个 interfaces
要如何实现
端口 8000 对 eth0
端口 8001 对 eth1
端口 8002 对 eth2
暂时用 程序监听端口时 执行
ip route replace default dev eth×
为什么不监听 interface 对应的 IP ?
可以 bind 到对应 IP 地址
或者用 iptables 打 mark ,然后在 ip rule 里面设规则
如果程序是你自己写的你可以搜索下"SO_BINDTODEVICE"
否则,参考 2 楼
我认为楼主问的不是在哪个接口上监听端口,那不难吧。
而是一个更纠结的问题: reverse path filter.
也可能是另一个纠结的问题:策略路由。
如果 eth0 、 eth1 、 eth2 上的 ip ,从客户端都能路由过来,
而且 3 个接口无论从哪个接口的网关(如果有的话) 出去都能路由到客户端,
那么在 linux 机器上关了 rpf 就行。。。几行 sysctl 的事儿。。。 无所谓客户端连接这 3 个 ip 中的哪个。。。
举个栗子:
三层交换机上弄 4 个 vlan ,
vlan1 192.168.1.1 ,
vlan2 192.168.2.1 ,
vlan3 192.168.3.1 ,
vlan4 192.168.4.1 。
此 linux 服务器的
eth0 接 vlan1 , ip 192.168.1.2/24 ,
eth1 接 vlan2 , ip 192.168.2.2/24 ,
eth3 接 vlan3 , ip 192.168.3.2/24 。
需要从 客户端 192.168.4.123 上访问到 192.168.1.2:8000 , 192.168.2.2:8001 , 192.168.3.2:8002 。
如果 linux 服务器默认启用 rpf ,则只有 linux 服务器的默认网关在哪个接口上,对应的服务才能访问到。 对于另外两个 ip ,数据包进来的端口和出去的不是同一个端口,所以被 rpf 过滤掉而不通。
或者另一种情况:
linux 服务器上弄策略路由,根据源 ip 源端口 指定路由。 这个我没试过,楼下补充。