如何使用 iptables 设置没有静态分配的 IPv6 DMZ?

如何使用 iptables 设置没有静态分配的 IPv6 DMZ?

我有多个网络位于 Comcast 的住宅网络上。我需要通过其中一台主机上的 SSH 代理从各种环境访问这些网络。

(碰巧我正在使用 OpenWRT,因此那里的特定解决方案会很有帮助;但我通常也很好奇如何使用任何基于 Linux 或 BSD 的边缘路由解决方案来实现这一点。)

对于 IPv4 来说,这相对简单:由于我所有的内部 IP 都是使用 DHCP 分配的,因此我可以简单地设置一个转发规则,将外部接口上的端口 22 移动到特定 IP 上的端口 22。

由于我的 IPv6 地址都是使用 SLAAC 分配的,因此我没有可以在 ip6tables-land 中用来转发事物的静态地址。

如何检测前缀分配的变化,以便建立新的 iptables 规则?或者有没有办法设置一条规则,根据从 MAC 地址或类似的东西发现 IP 地址来转发到特定主机?(这些主机都在一个网段上,因此多播等应该可以工作。)

答案1

我认为你的情况你可以使用动态前缀转发,我的规则示例为/etc/config/firewall

config rule
    option name 'HTTP-SSH-IPv6-myserver01'
    option src 'wan'
    option proto 'tcp'
    option dest 'lan'
    option dest_ip '::2c18:81a2:3422:f690/-64'
    option dest_port '22 80 443'
    option family 'ipv6'
    option target 'ACCEPT'

创建如下 iptables 规则:

-A zone_wan_forward -d ::2c18:81a2:3422:f690/::ffff:ffff:ffff:ffff -p tcp -m tcp --dport 80 -m comment --comment "!fw3: HTTP-IPv6-myserver01" -j zone_lan_dest_ACCEPT

这里也描述了同样的情况:动态 IPv6 子网和 ip6tables

因此它比 IPv4 更简单——您不需要在 DHCP 服务器上配置静态 IP 地址。

附言:第一次阅读问题时,标题中的“DMZ”让我感到困惑。

答案2

只要前缀是静态的,并且路由器知道该前缀,SLAAC 分配的地址就是静态的(临时地址除外)。

您有多种选择:

  • 您可以向所有地址开放端口 22,然后您就可以 ssh 到所有主机。
  • 配置路由器上的 DHCP 客户端以调用更改 ip6tables 规则的脚本。
  • 使用 u32 匹配来匹配部分 IP 地址。
  • 如果路由器的内部接口是 Linux 软件桥,则使用 ebtables,它可以匹配 TCP 端口和以太网地址。

相关内容