我们的服务器仅连接 IPv6,并且应用程序在私有网络上监听端口 8080,但我们需要公共互联网上的端口 80。
出于测试目的,当打开防火墙的 8080 端口时,访问 IPv6:8080 地址可以正常工作(没有永久的解决方案,最后必须关闭端口)
因此,我们需要一种类似 ip6tables TPROXY 提供的端口转发功能,按照建议将端口转发到另一个本地端口这里。但以下方法不起作用:
ip6tables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j TPROXY --on-port 8080
它根本不返回任何数据。(即使从 ip6tables 中删除所有其他规则,也只有这一条可用)当使用“ip6tables -t mangle -vL”查看包时,我看到 TPROXY 规则行上的包数量在增加。当打开“conntrack -E”时,我只看到一行标有 [DESTROY]。当查看“netstat -anp --tcp”时,我没有看到新的端口 80,只有应用程序端口 8080。
同样的问题,如果临时将应用程序重新配置为端口 80 并使用“-j TPROXY --on-port 80”或“-j TPROXY --on-port 0”,那么基本上测试端口转发到同一端口 - 没有成功。同样的问题,如果使用带有以下标记的高级路由:
ip6tables -t mangle -R PREROUTING 1 -i eth0 -p tcp --dport 80 -j TPROXY --on-port 8080 --tproxy-mark 0x2/0x3
ip -6 rule add fwmark 2 lookup 6
ip -6 route add local ::/0 dev eth0 table 6
我已经加载了“modprobe xt_TPROXY”和“echo 1 > /proc/sys/net/ipv6/conf/all/forwarding”
知道为什么这在装有 ip6tables v1.4.14 的 Debian Wheezy 上根本不起作用吗?我是不是忘了一些非常基本的配置步骤(这些是我使用 ip6tables 和 IPv6 的第一步)?
谢谢 Achim
PS:其他可能的解决方案是使用 Ubuntu 12.04 LTS 中的 IPv6 DNAT/SNAT,就像建议的那样这里或者使用 NAT66,就像建议的那样这里,但这两种技术看起来并不保密,我也找不到可行的例子……