我目前正在为家庭实验室路由器使用 iptables,并想添加 IPv6。我有 2 个 ISP。
我的第一个 ISP 为接口分配了 /128,并具有请求 /56 的能力。ISP1 连接到 eno1。
我的第二个 ISP 为接口分配了 /128,并具有请求 /64 的能力。ISP2 连接到 eno2。
我的局域网是 enp2s0f0。
如何让 LAN 上的客户端使用 ULA IP 范围,该范围“映射”到动态分配给 eno1 和 eno2 的 IPv6 范围?我想我可以在边缘使用某种形式的策略路由来通过每个 ISP 路由流量
答案1
我没有完整的示例,因为“netmap”是最近才添加到 ntftables 中的。内核部分,“netfilter:nft_nat:添加 netmap 支持”,位于Linux 5.8。用户工具同样是去年推出的新产品, src:添加 netmap 支持。根据提交消息,我认为 snat 现在支持带有 CIDR 前缀的 saddr 映射。
这可能更简单,而且无需转换,速度会稍微快一点。考虑不要使用 NPT。通告两个前缀,主机都有来自每个前缀的地址。可选地,为内部静态寻址生成一个 ULA 前缀,但不要将其映射到公共前缀。
这是一个实验室,也许可以尝试使用或不使用 NPT。
答案2
我能够让它与 iptables 一起工作。
cat /etc/radvd.conf 接口 enp2s0f0 {
AdvSendAdvert on;
AdvManagedFlag on;
prefix fd8a:9ae9:9as8:b8d::1/64 {
};
RDNSS fd8a:9ae9:9as8:b8d::1
{
};
DNSSL home.example.com
{
};
};
在我的 dhcpcd.conf 文件中
interface enp2s0f0
static ip_address=10.1.0.1/16
static routers=10.1.0.1
static domain_name_servers=8.8.8.8 8.8.4.4
noipv6rs
interface eno1
metric 10
ipv6rs
ia_na 1
ia_pd 1/::/64 enp2s0f0/0/64
在我的 iptables 脚本中:
$IP6TABLES -t nat -A POSTROUTING -s fd8a:9ae9:9as8:b8d::1/64 -o eno1 -j NETMAP --to 2604:2000:3201:d991::1/64
$IP6TABLES -t nat -A PREROUTING -d 2604:2000:3201:d991::1/64 -i eno1 -j NETMAP --to fd8a:9ae9:9as8:b8d::1/64
我认为我做得对——一切似乎都正常。