V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
squallcx
V2EX  ›  Linux

如何指定端口到指定的 interfaces 输出?

  •  
  •   squallcx · 2016-06-04 10:03:25 +08:00 · 3134 次点击
    这是一个创建于 3104 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我有 eth0 、 eth1 、 eth2 三个 interfaces
    要如何实现
    端口 8000 对 eth0
    端口 8001 对 eth1
    端口 8002 对 eth2

    暂时用 程序监听端口时 执行
    ip route replace default dev eth×
    4 条回复    2016-06-24 12:52:28 +08:00
    liyvhg
        1
    liyvhg  
       2016-06-04 11:46:00 +08:00 via Android
    为什么不监听 interface 对应的 IP ?
    jimzhong
        2
    jimzhong  
       2016-06-04 12:23:43 +08:00
    可以 bind 到对应 IP 地址
    或者用 iptables 打 mark ,然后在 ip rule 里面设规则
    KCheshireCat
        3
    KCheshireCat  
       2016-06-04 16:59:55 +08:00
    如果程序是你自己写的你可以搜索下"SO_BINDTODEVICE"

    否则,参考 2 楼
    Siril
        4
    Siril  
       2016-06-24 12:52:28 +08:00
    我认为楼主问的不是在哪个接口上监听端口,那不难吧。

    而是一个更纠结的问题: 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 源端口 指定路由。 这个我没试过,楼下补充。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1340 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.