使用 IPv4,您可以为主机提供 LAN 上的静态本地 IP 地址,并使用防火墙/路由器上的防火墙规则将网络使用的(可能是动态的)面向 Internet 的 IP 上的端口转发到特定主机上的端口,使用主机的静态 LAN IPv4 地址作为在防火墙规则中识别主机的稳定方式。
但是使用 IPv6,每个主机都使用真正的可路由 Internet IP,因此主机的传入流量已经发送到该主机,无需 NAT。但您仍然需要能够编写防火墙规则,规定应允许发送到某个特定主机和端口的传入流量,同时阻止发送到其他主机或端口的流量。
但是,如果网络分配 IPv6 地址的前缀是动态的,您如何在防火墙规则中引用特定主机以允许流量到达它?您不能只允许流量到达其 IPv6 地址,因为下周它将有一个带有不同前缀的 IPv6 地址,因为 ISP 将为网络分配一个不同的前缀。
那么,您如何实际配置防火墙以允许某个端口上的入站流量进入该主机?其中ip6tables
似乎有一个--dest
按目的地匹配的选项,但这似乎只允许您输入整个地址,而不是例如地址的后缀,您可以确保该后缀对于主机保持静态。从手册页:
[!] -s, --source address[/mask][,...]
Source specification. Address can be either a network name, a
hostname, a network IP address (with /mask), or a plain IP ad‐
dress. Hostnames will be resolved once only, before the rule is
submitted to the kernel. Please note that specifying any name
to be resolved with a remote query such as DNS is a really bad
idea. The mask can be either an ipv4 network mask (for ipta‐
bles) or a plain number, specifying the number of 1's at the
left side of the network mask. Thus, an iptables mask of 24 is
equivalent to 255.255.255.0. A "!" argument before the address
specification inverts the sense of the address. The flag --src
is an alias for this option. Multiple addresses can be speci‐
fied, but this will expand to multiple rules (when adding with
-A), or will cause multiple rules to be deleted (with -D).
[!] -d, --destination address[/mask][,...]
Destination specification. See the description of the -s
(source) flag for a detailed description of the syntax. The
flag --dst is an alias for this option.
有没有办法处理这个问题ip6tables
?是否有其他层ip6tables
可以生成随着网络重新编号而变化的规则,而这些规则实际上每个人都在使用?是否有某种ip6tables
插件可以让我匹配即使网络编号发生变化也会流向特定主机的流量?其他操作系统防火墙是否以不同的方式处理此问题?
答案1
ip6tables
接受地址的位掩码。与iptables
IPv4 不同,这些位不一定全部位于地址的开头,因此类似下面的代码应该可以正常工作:
ip6tables -A INPUT -d ::1234:56ff:fe78:90ab/::ffff:ffff:ffff:ffff -j ACCEPT
这将使得 ip6tables 接受所有发往以 结尾的 IPv6 地址的数据包::1234:56ff:fe78:90ab
,无论前缀是什么。