V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lifanxi
V2EX  ›  宽带症候群

IPv6 有没有类似于 IPv4 的端口映射的能力?

  •  
  •   lifanxi · 4 天前 · 2472 次点击

    以前我家里内网有一台应用服务器对外提供服务,我的 OpenWrt 路由器上的配置就是 IPv4 做了一个端口映射到这台服务器上,IPv6 直接把 DDNS 指向这台服务器,并在路由器上开放相应的端口。完美。

    最近对这台应用服务器做了拆分,拆成了多台 VM 在不同的 IP/端口上提供不同的服务。这时 IPv4 很容易解决,把相应的端口映射改到各台 VM 上就行。但 IPv6 不知道该怎么处理了,没有办法在路由上配置出类似 IPv4 的转发策略?

    23 条回复    2024-10-09 14:29:41 +08:00
    bigfei
        1
    bigfei  
       4 天前 via Android   ❤️ 1
    ipv6tables 也是可以 redirect 的
    rulagiti
        2
    rulagiti  
       4 天前
    基本上 ipv6 能做的 ip6tables 都能做
    rulagiti
        3
    rulagiti  
       4 天前
    @rulagiti ipv4 能做的
    blueboyggh
        4
    blueboyggh  
       4 天前 via Android
    你的多台 vm 没有自己的 v6 地址吗?
    lifanxi
        5
    lifanxi  
    OP
       4 天前
    @bigfei 仔细看了一下 OpenWrt 的配置界面,确实可以配 IPv6 的端口映射,我来试试看。
    lifanxi
        6
    lifanxi  
    OP
       4 天前
    @blueboyggh 有的,每台都不一样。但是如果用 DDNS 的方案,那就要绑定到几个不同的域名上,我还是希望通过一个域名用不同的端口访问到不同的服务。
    zbinlin
        7
    zbinlin  
       4 天前
    openwrt 不是支持 {hostname}.lan 来访问内网主机吗,你直接在 openwrt 做一个服务转发,然后根据不同的子域名转发到对应的主机服务上不就行了?
    feng0vx
        8
    feng0vx  
       4 天前 via iPhone
    feng0vx
        9
    feng0vx  
       4 天前 via iPhone
    另外设置防火墙 ipv6 入站 rules
    feng0vx
        10
    feng0vx  
       4 天前
    不好意思没看全,此上三层请忽略~
    lentrody
        11
    lentrody  
       4 天前 via Android   ❤️ 1
    IPv6 时代的正确习惯就是给每台设备分配子域名。
    在一台设备上跑 DDNS 脚本就同时更新所有同网关下设备的 IPv6 地址,只要设备的 IPv6 地址是固定后缀就行。
    可以这样本地拼接再提交 https://github.com/ddnspod/dnspod-ipv6-ddns/blob/master/dnspod-ipv6-ddns.sh
    也可以提交后让服务商自己拼接 https://dynv6.com/docs/apis
    blueboyggh
        12
    blueboyggh  
       4 天前 via Android   ❤️ 1
    @lifanxi 那你主路由装个 lucky 就好了,端口转发工具,支持 v6 转发,主路由如果装不了软件,就找其中一个 vm 装,然后 ddns 绑定到这个 vm
    A1188
        13
    A1188  
       4 天前 via Android   ❤️ 1
    试试 Socat ?
    SenLief
        14
    SenLief  
       4 天前
    这个内网装个反代就可以了 nginx caddy 什么的都行,或者直接用 socat 链接两个端口。
    lifanxi
        15
    lifanxi  
    OP
       4 天前
    @blueboyggh @A1188 @SenLief
    谢谢建议,反代或者转发是最后一条路,如果能直连我还是倾向于直连。因为毕竟多跳了一下,多增加了一个不稳定因素。
    目前试下来,@bigfei 说的直接配端口射映貌似是可以,我在 OpenWrt 上配置 DNAT 到另一台机器的 IPv6 地址是可以的。不过,如果用公网 IPv6 地址前缀会变,它貌似不支持动态前缀的写法,我还在继续试验改成用 ULA IPv6 地址试试。
    bobryjosin
        16
    bobryjosin  
       4 天前
    你的需求不就是 ipv6 nat ? nat 后就和 ipv4 一样可以端口映射了,内网每台机器和路由上都配一个静态的内网 ipv6 地址,有公网地址的路由上做一个 DNAT 不就行了,这样就不需要管前缀了。
    dislike
        17
    dislike  
       4 天前
    用 socat 吧,主路由 ipv6 做 DDNS,然后把各个端口分别用 socat 映射到内网各 VM 的 ipv4 地址就可以了,这样内网的 V4 地址固定,更容易管理.
    liyue961
        18
    liyue961  
       4 天前
    @lifanxi 使用反向代理不就好了。只要内网 v4 固定,设置端口就可以了
    flynaj
        19
    flynaj  
       4 天前 via Android
    openwrt 里面的 socat 可以满足你,可以 v4 ,v6 互相转换,也可以转发。
    fanersai
        20
    fanersai  
       3 天前
    安装 socat
    maybeonly
        21
    maybeonly  
       3 天前   ❤️ 1
    对于 tcp 和 udp ,ip6tables 可以实现和 iptables 一样的 nat 。
    对于 http 类服务,根据需求,还可以选择 http 代理的模式做反向代理。
    以及,建议还是用不同的域名区分不同的服务,毕竟就算是 ipv4 ,也可以用 host 区分( http 服务),就算不同的域名也可以加端口。
    lifanxi
        22
    lifanxi  
    OP
       2 天前
    感谢楼上各位。

    这几天试了各位推荐的各种方法,都可行:
    1. 直接像 IPv4 一样端口映射:直接在 OpenWrt 的 LuCI 上就可配置。对于动态 IPv6 前缀会变的情况,可以用 SLAAC+ULA 的固定地址做转发。
    2. 用 socat 转发:最灵活简单的一种做法。
    3. 用 nginx 等搭反向代理:不过我不喜欢这个方式,因为多了一层七层的转发,重。
    4. 为每台设备单独绑定 DDNS 域名:最直接的做法。

    虽然一开始我想要的 1 、2 、3 的效果,但是一圈实践加上仔细思考后,我最后还是决定用 4 的方案,这样各种应用相互隔离,以后如果想再迁移服务器等,改动最小。
    godall
        23
    godall  
       1 天前
    ipv4 端口转发的原因是 ip 地址有限,所以要端口复用。你 ipv6 了 ip 地址无限了,直接 ip6:PORT 访问就可以了,干嘛还要去转发呢?多此一举,且降低性能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   984 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.