Netfilter 表示他们支持 ipv6 的 SNAT 和 DNAT。我查看了 ip6tables 的手册页,发现列出了 SNAT 和 DNAT。所以我的问题是,您如何为它们制定规则?我尝试使用与 iptables 规则相同的结构,但 ip6tables 没有 nat 表,并且 SNAT/DNAT 是虚拟状态。所以我不知道从以下示例中要进行哪些修改:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
适用于 ip6tables。谢谢帮助!
答案1
编辑**:您需要 3.7+ 内核,因为那时他们发布了 ipv6 的 NAT 表。然后您使用 iptables 1.4.17,并且可以使用以下简单命令:
- ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
原来的**:
在 netfilter 网站您可以找到:
- 各种网络地址和端口转换,例如 NAT/NAPT(IPv4 和 IPv6)
来自 ipv6 手册页(http://linux.die.net/man/8/ip6tables)
- 源地址转换
- 虚拟状态,如果原始源地址与回复目的地不同则匹配。
- 基因转移酶
- 虚拟状态,如果原始目的地与答复源不同则匹配。
所以这似乎是可能的。但我还没有找到它的使用例子。
答案2
我有一张 nat 表:
apoc ~ # ip6tables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
并且可以编写SNAT规则:
apoc ~ # ip6tables -t nat -A POSTROUTING -o eth1 -j SNAT --to 2001:db8::1
apoc ~ # ip6tables -t nat -nvL POSTROUTING
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all * eth1 ::/0 ::/0 to:2001:db8::1
这是在带有内核 3.10.7-1-ARCH 的 ArchLinux 上;它是 netfilter 代码的一个相当新的添加。
不过我必须重申迈克尔·汉普顿的观点:
更不用说,如果您甚至在 IPv6 部署的背景下考虑 NAT,那么一定有严重问题,您需要重新审视您的网络设计。
答案3
IPv6 中没有 NAT。IPv6 的主要目的之一就是消除 NAT。发明 NAT 的主要目的是扩展 IPv4 的可用空间。有了 IPv6,我们就可以回到最初的设计,即互联网上的所有端点都可以从所有其他端点寻址。