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

Linux 单网卡多 ip 如何指定非默认 ip 的路由?

  •  
  •   hadoop · 2017-01-30 01:58:21 +08:00 · 4600 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体来说,一个 linux server ,单网卡,有 2 个 ip , A 和 B , A 是主 ip,这俩同一个网段,ssh都能连得上 。

    现在比如搭一个 socks5 代理,希望负载均衡分别能从两个 ip 出去(请求从哪个 ip 来,就从哪个 ip 出去),这个请问该怎么实现?
    26 条回复    2017-02-09 23:05:41 +08:00
    ayanamist
        1
    ayanamist  
       2017-01-30 02:11:28 +08:00 via Android
    默认就是这样的,哪个网卡了的流量就会从哪个网卡回去,否则用户收不到回包的。
    ryd994
        2
    ryd994  
       2017-01-30 02:25:16 +08:00 via Android
    1.物理网卡和 interface 不一定对应,可以有多个 interface
    2. 你的需求可以通过开两个 socks 服务器,并各自 bind 不同 IP 处理。而且 socks 服务器是 7 层,并不在乎哪个 IP 在哪个网卡,只要 IP 对就行。
    hadoop
        3
    hadoop  
    OP
       2017-01-30 02:26:31 +08:00 via Android
    @ayanamist 我问题可能没表述清楚。再具体点, socks 程序监听在 A 和 B 的 1080 端口,现在 client 端有个请求 curl http://ip.ipinfo.io (获取 ip ),从 B : 1080 进来,通过代理去访问。但是最后返回给 client 的 ip 不是 B 自己的,是 A 的
    xfspace
        4
    xfspace  
       2017-01-30 03:45:02 +08:00 via iPad
    你的程序有问题?
    lslqtz
        6
    lslqtz  
       2017-01-30 07:10:53 +08:00 via iPhone
    @hadoop 从 B:1080 进来 通过 A 去访问 然后通过 B 返回...
    我只想到 HTTP 代理可能可以实现。
    jasontse
        7
    jasontse  
       2017-01-30 07:42:07 +08:00 via Android
    这事和哪个 IP 进来的没啥关系,你代理发出 tcp 请求 bind 是哪个就是哪个。
    zaishanfeng
        8
    zaishanfeng  
       2017-01-30 09:15:42 +08:00 via Android
    开 ss 时就绑定 ip 。 我指的是绑定网卡。方法自行 g
    iRiven
        9
    iRiven  
       2017-01-30 09:51:06 +08:00 via Android
    负载均衡,在外面就要决定要用 A 或 B 吧,再来一个 C ,帮你做这个决定😂
    gamexg
        10
    gamexg  
       2017-01-30 10:26:28 +08:00 via Android
    这个功能需要 socks5 代理支持,如果不支持的话需要开两个 socks5 ,自己配置策略路由来做。
    ic3z
        11
    ic3z  
       2017-01-30 11:24:47 +08:00 via Android
    加路由
    hadoop
        12
    hadoop  
    OP
       2017-01-30 11:37:23 +08:00
    @ic3z 能具体点不?
    snnn
        13
    snnn  
       2017-01-30 12:04:23 +08:00 via Android
    你为什么需要多 IP ?
    zwzmzd
        14
    zwzmzd  
       2017-01-30 12:15:34 +08:00 via Android
    单机多接口建议看看这两篇文章
    http://www.wlug.org.nz/SourceBasedRouting
    http://lartc.org/howto/lartc.rpdb.multiple-links.html

    我之前的应用环境是多拨负载均衡,一个网卡上建立了多个 pppoe 链接对外服务
    ic3z
        15
    ic3z  
       2017-01-30 13:53:08 +08:00 via Android
    @hadoop 如果目的地址不固定的话当我没说。。
    hadoop
        16
    hadoop  
    OP
       2017-01-30 13:54:26 +08:00 via Android
    @snnn 爬虫代理啊
    hadoop
        17
    hadoop  
    OP
       2017-01-30 13:55:02 +08:00 via Android
    @zwzmzd 多谢,我看下
    hadoop
        18
    hadoop  
    OP
       2017-01-30 15:22:41 +08:00
    @lslqtz 不是,我希望的是从 B:1080 进来的请求,通过 B 去访问,但是现在实验下来还是根据 A 去访问了
    hadoop
        19
    hadoop  
    OP
       2017-01-30 15:23:11 +08:00
    @zaishanfeng 单网卡,多 ip ,咋搞?
    Orzzzz
        20
    Orzzzz  
       2017-01-30 15:27:32 +08:00
    一个网卡只能有一个默认路由,否则会乱套的,这是规定,也是没办法的事情。
    hadoop
        21
    hadoop  
    OP
       2017-01-30 21:38:25 +08:00
    @gamexg 是的,后来找了 danted 这个 socks 软件,软件支持后面就好弄多了
    hadoop
        22
    hadoop  
    OP
       2017-01-30 21:40:15 +08:00
    @shiji 我也想到过用 ss 来做,但是我只需要一个 socks5 代理,后来找了 dante 这个 socks5 软件来实现了从哪个监听 ip 来,就从哪个 ip 出去的功能
    msg7086
        23
    msg7086  
       2017-01-31 01:44:07 +08:00
    #18 @hadoop 入口 IP 和出口 IP 是两回事,完全无关。
    假如你装了 10 块网卡,第 8 块网卡上连进来的请求,你程序做代理的时候照样会从默认 IP 出去。
    要改变出口 IP ,需要在代理上绑定出口 IP 。
    nomaka
        24
    nomaka  
       2017-01-31 12:14:39 +08:00
    这个路由好像没法做 你要先指两条默认路由 然后 iptables 做 rule
    kuretru
        25
    kuretru  
       2017-02-06 22:27:14 +08:00
    当时看到这个问题的时候,就想到分别使用两个用户 userA 、 userB 运行 2 个 socks5 进程,最后根据用户指定源 IP 地址这个解决方案,但是不知如何实现,便没有回复。今天偶然看到 iptables 即可支持,-m owner --uid-owner userA ,即可捕捉到指定用户的流量,然后根据需要从 A 地址或 B 地址转发出去。
    dawncold
        26
    dawncold  
       2017-02-09 23:05:41 +08:00
    连接建立的时候(src_host, src_port, dst_host, dst_port)就已经是确定的了,如果在 A 上建立了连接,你却用 B 返回,这根本就无法返回呢, B 在那个时候都没有根客户端建立起来连接。

    你说的负载均衡到底指的是什么,希望有什么效果?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3526 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:07 · PVG 19:07 · LAX 03:07 · JFK 06:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.