Jos*_*ica 12 networking firewall ipv6 iptables
假设我现在在 IPv4 上有这个配置:
我的路由器(一个 Linux 机器)在 eth0 上连接到 Internet,在 eth1 上连接到我的 LAN。我想将端口 80 转发到 10.1.2.3。这是我目前的做法:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to 10.1.2.3
iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
现在我想在 IPv6 上做同样的事情。假设我的配置与以前相同,但有以下更改:
我的 ISP 通过前缀委托为我的路由器提供了 2001:db8:aaaa::/64 范围。我的路由器在 eth1 上为自己获取 2001:db8:aaaa::1 并将 2001:db8:aaaa::123 提供给我想要打开端口 80 的主机。
在 IPv6 情况下不再需要 NAT,所以我需要的只是允许流量的防火墙规则。这是我能想到的规则:
ip6tables -A FORWARD -i eth0 -d 2001:db8:aaaa::123 -p tcp -m tcp --dport 80 -j ACCEPT
我遇到的问题是我必须将 2001:db8:aaaa::123 硬编码到我的防火墙规则中,而 2001:db8:aaaa:: 前缀可能会随我的 ISP 的突发奇想而改变。在 IPv4 世界中,我必须硬编码的唯一 IP 是内部 IP,所以我知道它永远不会在我的控制下被更改。有什么方法可以允许这样的流量,而不必每次我的 ISP 更改我的委派前缀时都修改规则?(如果 pf 可以做我想做的但 ip6tables 不能,我愿意为此切换到 BSD。)
虽然没有专用选项,但您可以使用通用u32iptables 模块(请参阅iptables-extensions)来仅匹配接口 ID 部分(始终从 IP 标头的字节 32 开始):
-A FORWARD -m u32 --u32 "32 = 0x11223344 && 36 = 0xAABBCCDD" -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这将匹配任何以 结尾的目标地址:1122:3344:aabb:ccdd。
在 IPv6 标头中,源地址从字节 8 开始(网络在 8 处,接口在 16 处);目标地址为 24(网络为 24,接口为 32)。您也可以使用按位运算来实现 CIDR 掩码匹配等功能u32。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |