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

云服务器,有没有办法多台服务器共用一个公网 ip

  •  
  •   unt · 61 天前 · 4425 次点击
    这是一个创建于 61 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:购买多台云服务器,不同服务器挂不同的服务。

    但是每台服务器配一个公网 ip 太贵了,有没有办法只买一个公网 ip 就能解决,然后多台服务器组内网通讯。

    ip 已经都买好了,只是来请教一下 V 友们。

    50 条回复    2022-12-04 20:53:17 +08:00
    love2328
        1
    love2328  
       61 天前
    nginx ??
    lscho
        2
    lscho  
       61 天前 via iPhone
    可以
    lichao
        3
    lichao  
       61 天前
    nginx 转发一下就可以了
    skywalkerw
        4
    skywalkerw  
       61 天前
    nginx
    opengps
        5
    opengps  
       61 天前
    可以,eip ,结合 vpc 网络,你可以搞一个类似于家里似的,一个路由下多个设备联网
    motherfaka
        6
    motherfaka  
       61 天前
    阿里云有个公网 nat 网关,应该符合你的要求
    PeacePeach
        7
    PeacePeach  
       61 天前 via iPhone
    nginx upstream
    Runm
        8
    Runm  
       61 天前
    当然可以了,搞个内网穿透就好了,推荐 nps ,服务端管理多个客户端,即改即生效。
    kindjeff
        9
    kindjeff  
       61 天前
    在 VPC 里配 SNAT
    BeforeTooLate
        10
    BeforeTooLate  
       61 天前
    负载均衡?
    Mohanson
        11
    Mohanson  
       61 天前   ❤️ 1
    端口转发. 其实也不用装个 nginx 这么麻烦, 自己写代码正好 21 行(Golang), 把公网 ip 的 20000 端口转发到一台内网机器指定端口:

    ```
    ln, _ := net.Listen("tcp", "0.0.0.0:20000")
    for {
    app, err := ln.Accept()
    if err != nil {
    continue
    }
    go func() {
    defer app.Close()
    dst, err := net.Dial("tcp", "your dest server ip:port")
    if err != nil {
    return
    }
    defer dst.Close()
    go func() {
    io.Copy(app, dst)
    app.Close()
    }()
    io.Copy(dst, app)
    dst.Close()
    }()
    }
    ```
    Twnysta
        12
    Twnysta  
       61 天前
    不是负载均衡服务器吗?
    guowq
        13
    guowq  
       61 天前 via Android
    内网配好,在有外网的服务器上操作,至于用什么,见 www.v2ex.com/t/853232
    pysex
        14
    pysex  
       61 天前
    阿里云的 CLB 负载均衡
    mytsing520
        15
    mytsing520  
       61 天前
    以下答复限于阿里云场景。

    场景一:入方向,多台服务器,Web 业务,端口复用。
    解决方案:可使用阿里云 ALB ,七层负载均衡,基于域名转发。或阿里云 CLB 、NLB ,转发到七层反向代理( ECS 实例或实例集群)后,根据域名转发到实际业务。

    场景二:出方向,多台服务器统一使用一个出口。
    解决方案:使用 NAT 网关产品。
    edis0n0
        16
    edis0n0  
       61 天前
    wireguard
    daimaosix
        17
    daimaosix  
       61 天前 via Android
    人家嫌公网 ip 太贵,楼上推荐负载均衡器,NAT 网关这玩意比公网 IP 还贵,图啥
    finalstart
        18
    finalstart  
       61 天前
    lvs haproxy nginx 转发基本都可以
    preach
        19
    preach  
       61 天前
    一台服务器开个转发到内网就行哇,阿里云同区域的内网至少千兆
    bthulu
        20
    bthulu  
       61 天前
    楼上这些转发, 都是基于楼主是用作 http 服务器来的吧, 但是楼主不一定是拿来干这个的啊, 也许就是用作纯 udp 游戏服务器呢, 这不就得客户端跟网关协商好如何转发吗, 这种也能靠 nginx 来弄?
    wu00
        21
    wu00  
       61 天前
    NAT 网关比公网 IP(带宽)便宜多了,NAT 绑弹性公网 IP ,出网入网配置灵活简单,各服务多多少少有访问公网的需求把
    ThirdFlame
        22
    ThirdFlame  
       61 天前
    15 楼是正确答案。
    如果不选用这种产品,那么可以在一台主机上配置公网 IP ,入方向上 nginx 反向代理、出方向上 SNAT 即可。
    unt
        23
    unt  
    OP
       61 天前
    谢谢各位的回复,我去看下。。。

    然后我的需求细节没有讲清楚:
    我是第一台服务器做 web 应用及第三方 web 应用
    第二台服务器跑 mysql,redis,kafka
    第三台服务器跑 mongo
    liufish
        24
    liufish  
       61 天前
    3 台服务器是否在同一个区域,是否有能互通的私网 IP 。
    例如阿里云,如果这些服务器都在同一个区域,私网 IP 能通,用 ng 就好了。

    NAT 太贵了,不太划算。
    AnroZ
        25
    AnroZ  
       61 天前
    三台组成一个局域网,公网 IP 绑一台然后 nginx 反向代理到其他两台或者 iptables 端口转发,公网临时访问可以用 ssh -L
    tanglu
        26
    tanglu  
       61 天前
    想问问楼主 公网 IP 在哪购买的呀?
    cxh116
        27
    cxh116  
       61 天前
    @bthulu nginx 早就支持 4 层代理了 , tcp, udp, sni proxy 都没问题

    https://nginx.org/en/docs/stream/ngx_stream_core_module.html
    snoopygao
        28
    snoopygao  
       61 天前
    我看了楼上,你选择以下两个方案靠谱点
    一、在带公网的服务器上装 haproxy ,转发 tcp 协议就可以;
    二、在带公网的服务器上启用 firewalld ,使用 public 区域上网(开启 masqurade ),internal 区域内部通讯,如果其它服务器要上网,在 vpc 内把默认路由指向第一台服务器,主服务器网卡上关闭 检查源目 MAC 地址;
    强烈建议第二种。
    天翼云解决方案专家+华为云解决方案专家
    binfengxy
        29
    binfengxy  
       61 天前 via iPhone
    云上的方案当然要云原生比较好,选 15 楼
    1311317
        30
    1311317  
       61 天前 via Android
    keepalived 可行?
    honmaple
        31
    honmaple  
       61 天前
    LVS
    totopper312
        32
    totopper312  
       61 天前
    最开始腾讯云是支持把一台服务器当 nat 网关用,后来下架了,有方法,比较折腾,入口方向和出口方向都要考虑。
    imNull
        33
    imNull  
       61 天前
    @totopper312 大佬,正好要用到,什么方法,有链接么?学习下
    moonheart
        34
    moonheart  
       61 天前
    iptables 配置下 snat dnat 就好了
    paranoiagu
        35
    paranoiagu  
       61 天前 via Android
    @daimaosix 是的是的。

    Nginx 是可以的,我就是这么干的。

    现在是用阿里云,其实发现 IP 不贵,贵的是流量,如果流量不多,按量收,其实没多少钱。
    eason1874
        36
    eason1874  
       61 天前
    同区域的服务器本来就可以内网通讯的,只要在一个 VPC 或者 VPC 互通就行,不管有没有公网 IP

    共用一个公网出口的话,就是把公网 IP 绑定到 A ,然后其他机器拿 A 当网关,A 相当于软路由的角色,或者用代理的方法,就是 socks5 、nginx 之类的
    totopper312
        37
    totopper312  
       61 天前   ❤️ 1
    @imNull https://cloud.tencent.com/document/product/213/38839 2019 年 12 月 06 日后,腾讯云不支持在云服务器购买页勾选配置公网网关。如果您有需要,请按照本文所示方法自行配置。
    fengbjhqs
        38
    fengbjhqs  
       61 天前 via Android
    菜鸟再问,如果 vps 不在一个运营商可以吗
    kamin
        39
    kamin  
       61 天前
    @fengbjhqs 可以尝试用 Wireguard 将远程服务器的 ip 分配给指定服务器 /个人电脑使用
    seakingii
        40
    seakingii  
       61 天前
    在有公网 IP 的服务器上做端口转发
    cubecube
        41
    cubecube  
       61 天前
    有标准化的服务,NAT 网关(收费)
    当然你可以自己弄,iptables 转呗
    msg7086
        42
    msg7086  
       60 天前
    @Mohanson 那直接用 socat 不就行了,不用自己写代码重新实现一遍 socat 。
    yikyo
        43
    yikyo  
       60 天前 via iPhone
    楼主需求描述有误

    看需求不需要公用 IP 吧,本身这些应用就不该暴露到公网

    看看你的云服务商,有没有提供内网 ip ,内部用内网 ip ,web 服务用公网 ip
    lower
        44
    lower  
       60 天前
    你的第二、第三服务器是不是不需要对外公网暴露服务啊?
    登录第一台服务器直接用内网 ip 去远程连接和管理就行?
    Tink
        45
    Tink  
       60 天前
    内网本来就通的
    huangzxx
        46
    huangzxx  
       60 天前
    VPC NAT 网关,了解下
    pxllong
        47
    pxllong  
       60 天前
    nat 网关
    piku
        48
    piku  
       60 天前 via Android
    江苏电信:共享公网 IP ?这事我熟啊
    piku
        49
    piku  
       60 天前 via Android
    觉得你的需求更适合一个服务器+若干容器的方案
    zeze0556
        50
    zeze0556  
       56 天前 via Android
    带公网 IP 的做网关,其他的流量走网关。腾讯云和阿里云都支持这样。公网 ip 的云主机也可以同时做其他用途
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   385 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.