V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  程序员

如何让多台服务器使用一台内部机器作为代理?

  •  1
     
  •   JasonLaw · 2020-10-19 18:43:22 +08:00 via iPhone · 2900 次点击
    这是一个创建于 1493 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设我有多台服务器,分别为 server_1, server_2, server_3,我希望在这些服务器上浏览网页时,使用一台内部机器作为代理,而不是服务器直接请求资源。

    请问有什么工具可以做到呢?
    第 1 条附言  ·  2020-10-19 22:11:38 +08:00

    谢谢大家的回复,我的确没有将情况说清楚,我所说的服务器是具有公网IP地址的,而内网机器是没有公网IP地址的。我想要的就是:对“多台具有公网IP地址的服务器”的请求,其实会经过/落在“没有公网IP地址的内网机器”。

    我最后使用fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.实现了我的需求。

    比如说我有两台服务器,分别为server_1和server_2,按照Access your computer in LAN by SSH,我先在两台服务器上运行frps,然后在本地启动两个frpc(一个使用frpc.ini1,其中的server_addr是server_1的公网地址;另一个使用frpc.ini2,其中的server_addr是server_2的公网地址)。这样,我就实现了“不管是访问server_1还是server_2,最终都会落在本地机器”。

    24 条回复    2020-10-20 17:41:12 +08:00
    andyzhshg
        1
    andyzhshg  
       2020-10-19 18:51:00 +08:00
    任意一个 http 代理都行吧,比如 privoxy?
    coderxy
        2
    coderxy  
       2020-10-19 18:52:10 +08:00
    SSR 就可以
    ai277014717
        3
    ai277014717  
       2020-10-19 18:57:44 +08:00
    透明代理
    eudore
        4
    eudore  
       2020-10-19 19:14:13 +08:00
    ssr 自带负载均衡

    nginx 监听隧道代理的地址,tcp 转发给后端多个代理服务器
    misaka19000
        5
    misaka19000  
       2020-10-19 19:21:57 +08:00
    旁路由
    farmer01
        6
    farmer01  
       2020-10-19 19:29:45 +08:00
    socks5 代理
    http 代理
    gxgxxn
        7
    gxgxxn  
       2020-10-19 19:44:55 +08:00
    代理服务器是不是可以记录客户端的访问记录?
    opengps
        8
    opengps  
       2020-10-19 20:22:45 +08:00 via Android   ❤️ 1
    楼主其实没说明白环境,我盲猜一下阿里云服务器集群环境,也欢迎其他阿里云问题咨询我:
    统一入口,使用 SLB
    统一出口,使用 NAT 网关
    这样来保证,无论后端多少台机器,都是共同的出口和入口,对接其他系统,也可以轻松的配置一次白名单即可
    JasonLaw
        9
    JasonLaw  
    OP
       2020-10-19 22:12:58 +08:00
    @andyzhshg #1
    @coderxy #2
    @ai277014717 #3
    @eudore #4
    @misaka19000 #5
    @farmer01 #6
    @gxgxxn #7
    @opengps #8

    谢谢大家的回复,我在附言补充了信息。我最后使用 frp 来实现我的需求。
    kerro1990
        10
    kerro1990  
       2020-10-19 23:07:10 +08:00
    iptables 不就行了吗?搞这么复杂
    snoopygao
        11
    snoopygao  
       2020-10-20 08:56:52 +08:00
    frp 小心被爆破
    JasonLaw
        12
    JasonLaw  
    OP
       2020-10-20 09:00:56 +08:00
    @snoopygao #11 可以具体解释一下吗?不太明白你所说的。
    wizardoz
        13
    wizardoz  
       2020-10-20 10:13:32 +08:00
    配置一下 iptables 就可以了,将有工网 IP 的主机设置为其它主机的默认网关。
    GM
        14
    GM  
       2020-10-20 12:23:34 +08:00
    @JasonLaw 我觉得你的附言补充,把问题解释得更难理解了...........
    JasonLaw
        15
    JasonLaw  
    OP
       2020-10-20 12:45:51 +08:00 via iPhone
    @GM 😨哪里不理解呢?
    GM
        16
    GM  
       2020-10-20 12:54:36 +08:00
    @JasonLaw

    希望在这些服务器上浏览网页时,使用一台内部机器作为代理,而不是服务器直接请求资源

    “在这些服务器上浏览网页”,指的是在这些服务器上使用浏览器或者 curl 之类的访问外部页面吗?

    如果是,那么“服务器是具有公网 IP 地址的,而内网机器是没有公网 IP 地址”,没外网 IP 的内物机器怎么请求外部页面?
    joesonw
        17
    joesonw  
       2020-10-20 13:39:44 +08:00
    你想问的是 DNAT 吗?
    JasonLaw
        18
    JasonLaw  
    OP
       2020-10-20 14:12:01 +08:00
    @GM #16

    “在这些服务器上浏览网页”,指的是在这些服务器上使用浏览器或者 curl 之类的访问外部页面吗?

    是的

    “而内网机器是没有公网 IP 地址”其实不太恰当,应该是没有自己独自占有的公网 IP 地址才对。内网机器是在 NAT 后面的。
    JasonLaw
        19
    JasonLaw  
    OP
       2020-10-20 14:14:51 +08:00
    @joesonw #17 看了 aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV0d29ya19hZGRyZXNzX3RyYW5zbGF0aW9uI0ROQVQ=,是的,我是想实现“publish a service located in a private network on a publicly accessible IP address”。
    snoopygao
        20
    snoopygao  
       2020-10-20 14:29:24 +08:00
    虽然我没看懂你的问题,但是使用 haproxy 或者 squid 应该是能解决的
    GM
        21
    GM  
       2020-10-20 15:16:57 +08:00
    @JasonLaw 其实我碰到一个类似的场景,就是做公众号开发的时候,新增一台服务器就要到公众号后台添加一次 IP 白名单,非常麻烦且恶心( TX 看过来:凸),最终我的做法找一台服务器统一做出口,公众号那边只需要配置一次 IP 白名单即可,方法如下:

    在出口服务器安装 nginx,配置监听 8888 端口成代理服务器,把所有请求转发到 https://api.weishit.扣扣.com

    其他所有需要访问公众号接口的服务,统一修改成使用上面配置好的代理服务器,比如本来需要请求 https://api.weishit.扣扣.com/login/sns,全部改成请求 http://内网代理 IP:8888/login/sns

    这个方法用了很久了,很好用。
    JasonLaw
        22
    JasonLaw  
    OP
       2020-10-20 15:19:08 +08:00
    @snoopygao #20 我现在使用了 squid 和 frp 解决了问题。
    joesonw
        23
    joesonw  
       2020-10-20 17:35:48 +08:00
    @JasonLaw 不管是 DNAT 还是 SNAT, 皆可通过 iptables 来搞定.
    JasonLaw
        24
    JasonLaw  
    OP
       2020-10-20 17:41:12 +08:00
    @kerro1990 #10
    @wizardoz #13
    @joesonw #23

    谢谢,我有空了解一下 iptables 相关的知识。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3250 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.