以前我家里内网有一台应用服务器对外提供服务,我的 OpenWrt 路由器上的配置就是 IPv4 做了一个端口映射到这台服务器上,IPv6 直接把 DDNS 指向这台服务器,并在路由器上开放相应的端口。完美。
最近对这台应用服务器做了拆分,拆成了多台 VM 在不同的 IP/端口上提供不同的服务。这时 IPv4 很容易解决,把相应的端口映射改到各台 VM 上就行。但 IPv6 不知道该怎么处理了,没有办法在路由上配置出类似 IPv4 的转发策略?
1
bigfei 67 天前 via Android 1
ipv6tables 也是可以 redirect 的
|
2
rulagiti 67 天前
基本上 ipv6 能做的 ip6tables 都能做
|
4
blueboyggh 67 天前 via Android
你的多台 vm 没有自己的 v6 地址吗?
|
6
lifanxi OP @blueboyggh 有的,每台都不一样。但是如果用 DDNS 的方案,那就要绑定到几个不同的域名上,我还是希望通过一个域名用不同的端口访问到不同的服务。
|
7
zbinlin 67 天前
openwrt 不是支持 {hostname}.lan 来访问内网主机吗,你直接在 openwrt 做一个服务转发,然后根据不同的子域名转发到对应的主机服务上不就行了?
|
8
feng0vx 67 天前 via iPhone
*/10 * * * * logger -t 'ddns' `wget -q -O - "https://ipv4.dynv6.com/api/update?hostname=z.dynv6.net&ipv4=auto&token=z"`
*/10 * * * * logger -t 'ddns' `wget -q -O - "https://ipv6.dynv6.com/api/update?hostname=z.dynv6.net&ipv6=auto&token=z"` |
9
feng0vx 67 天前 via iPhone
另外设置防火墙 ipv6 入站 rules
|
10
feng0vx 67 天前
不好意思没看全,此上三层请忽略~
|
11
lentrody 67 天前 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 |
12
blueboyggh 67 天前 via Android 1
@lifanxi 那你主路由装个 lucky 就好了,端口转发工具,支持 v6 转发,主路由如果装不了软件,就找其中一个 vm 装,然后 ddns 绑定到这个 vm
|
13
A1188 67 天前 via Android 1
试试 Socat ?
|
14
SenLief 67 天前
这个内网装个反代就可以了 nginx caddy 什么的都行,或者直接用 socat 链接两个端口。
|
15
lifanxi OP @blueboyggh @A1188 @SenLief
谢谢建议,反代或者转发是最后一条路,如果能直连我还是倾向于直连。因为毕竟多跳了一下,多增加了一个不稳定因素。 目前试下来,@bigfei 说的直接配端口射映貌似是可以,我在 OpenWrt 上配置 DNAT 到另一台机器的 IPv6 地址是可以的。不过,如果用公网 IPv6 地址前缀会变,它貌似不支持动态前缀的写法,我还在继续试验改成用 ULA IPv6 地址试试。 |
16
bobryjosin 67 天前
你的需求不就是 ipv6 nat ? nat 后就和 ipv4 一样可以端口映射了,内网每台机器和路由上都配一个静态的内网 ipv6 地址,有公网地址的路由上做一个 DNAT 不就行了,这样就不需要管前缀了。
|
17
dislike 67 天前
用 socat 吧,主路由 ipv6 做 DDNS,然后把各个端口分别用 socat 映射到内网各 VM 的 ipv4 地址就可以了,这样内网的 V4 地址固定,更容易管理.
|
19
flynaj 66 天前 via Android
openwrt 里面的 socat 可以满足你,可以 v4 ,v6 互相转换,也可以转发。
|
20
fanersai 66 天前
安装 socat
|
21
maybeonly 66 天前 1
对于 tcp 和 udp ,ip6tables 可以实现和 iptables 一样的 nat 。
对于 http 类服务,根据需求,还可以选择 http 代理的模式做反向代理。 以及,建议还是用不同的域名区分不同的服务,毕竟就算是 ipv4 ,也可以用 host 区分( http 服务),就算不同的域名也可以加端口。 |
22
lifanxi OP 感谢楼上各位。
这几天试了各位推荐的各种方法,都可行: 1. 直接像 IPv4 一样端口映射:直接在 OpenWrt 的 LuCI 上就可配置。对于动态 IPv6 前缀会变的情况,可以用 SLAAC+ULA 的固定地址做转发。 2. 用 socat 转发:最灵活简单的一种做法。 3. 用 nginx 等搭反向代理:不过我不喜欢这个方式,因为多了一层七层的转发,重。 4. 为每台设备单独绑定 DDNS 域名:最直接的做法。 虽然一开始我想要的 1 、2 、3 的效果,但是一圈实践加上仔细思考后,我最后还是决定用 4 的方案,这样各种应用相互隔离,以后如果想再迁移服务器等,改动最小。 |
23
godall 64 天前
ipv4 端口转发的原因是 ip 地址有限,所以要端口复用。你 ipv6 了 ip 地址无限了,直接 ip6:PORT 访问就可以了,干嘛还要去转发呢?多此一举,且降低性能。
|