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

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

  •  
  •   unt · 2022-11-29 14:54:36 +08:00 · 6159 次点击
    这是一个创建于 723 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    50 条回复    2022-12-04 20:53:17 +08:00
    love2328
        1
    love2328  
       2022-11-29 14:56:19 +08:00
    nginx ??
    lscho
        2
    lscho  
       2022-11-29 14:58:26 +08:00 via iPhone
    可以
    lichao
        3
    lichao  
       2022-11-29 14:59:07 +08:00
    nginx 转发一下就可以了
    skywalkerw
        4
    skywalkerw  
       2022-11-29 14:59:25 +08:00
    nginx
    opengps
        5
    opengps  
       2022-11-29 14:59:29 +08:00
    可以,eip ,结合 vpc 网络,你可以搞一个类似于家里似的,一个路由下多个设备联网
    motherfaka
        6
    motherfaka  
       2022-11-29 14:59:38 +08:00
    阿里云有个公网 nat 网关,应该符合你的要求
    PeacePeach
        7
    PeacePeach  
       2022-11-29 14:59:56 +08:00 via iPhone
    nginx upstream
    Runm
        8
    Runm  
       2022-11-29 15:01:12 +08:00
    当然可以了,搞个内网穿透就好了,推荐 nps ,服务端管理多个客户端,即改即生效。
    kindjeff
        9
    kindjeff  
       2022-11-29 15:04:48 +08:00
    在 VPC 里配 SNAT
    BeforeTooLate
        10
    BeforeTooLate  
       2022-11-29 15:05:21 +08:00
    负载均衡?
    Mohanson
        11
    Mohanson  
       2022-11-29 15:05:22 +08:00   ❤️ 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  
       2022-11-29 15:05:44 +08:00
    不是负载均衡服务器吗?
    guowq
        13
    guowq  
       2022-11-29 15:12:05 +08:00 via Android
    内网配好,在有外网的服务器上操作,至于用什么,见 www.v2ex.com/t/853232
    pysex
        14
    pysex  
       2022-11-29 15:13:00 +08:00
    阿里云的 CLB 负载均衡
    mytsing520
        15
    mytsing520  
       2022-11-29 15:17:18 +08:00
    以下答复限于阿里云场景。

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

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

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

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

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

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

    现在是用阿里云,其实发现 IP 不贵,贵的是流量,如果流量不多,按量收,其实没多少钱。
    eason1874
        36
    eason1874  
       2022-11-29 21:53:27 +08:00
    同区域的服务器本来就可以内网通讯的,只要在一个 VPC 或者 VPC 互通就行,不管有没有公网 IP

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

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

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