如何在不使用橋接的情況下解決多網段的IPv6問題

MANESEC on 2023-09-08

0x0 前言

image

IPv6來了,由於我家的網絡一直都是三個網段,又想讓所有網段都可以使用IPv6,因爲三個網段各有各的特色,所以沒辦法拆成一個網段。

由於不希望魔改成橋接來聯網,經過下面的設備會經過一層運營商的路由器,也就是說我的路由器設備是使用 DHCPv6 去聯網的,這樣子 PD 會有 /64 的問題,換句話説 /64 的子網沒辦法爲下面的三個網段劃分子網,只能給其中一個網段,因爲 /64 已經不能再分了。

image

事實上運營商一般給的都是 /60 的,也就是說最大 64 - 60 = 4,2^4 = 16 個網段,但由於使用DHCPv6 只能獲取到一個網段,但是我有3個網段。

image

0x1 一種萌生的想法

image

如果在運營商給的路由器下面使用兩臺交換機進行連接,我會得到2個PD,這兩個PD各不相同的,使用3個路由器連接正常我會獲得3個PD,這樣我是不是可以解決IPv6的問題?

0x2 虛擬化設備

要想做成上面的測試,我需要在一臺設備内虛擬一個交換機,然後把三個路由器接在一起,折磨了很久我找到了這篇官方文檔

注意:這裏我使用 openwrt 固件

在開始之前需要對軟路由進行臨時的聯網,儅軟路由正確的連接了網絡之後就可以進行下面的操作了。

bash
opkg update
opkg install kmod-macvlan mwan3 luci-app-mwan3 ip6tables-nft iptables-nft

image

首先我要虛擬3個wan6網卡,同時向運營商給的路由器獲取ipv6,因爲我需要3個PD段,另外加一個 wan 是使用ipv4的,所以加起來就有4個wan,參考官方的寫法是。

bash
config device 'wan6_31'
    option name 'wan6_31'
    option type 'macvlan'
    option ifname 'eth0'

 config device 'wan6_231'
    option name 'wan6_231'
    option type 'macvlan'
    option ifname 'eth0'

 config device 'wan6_232'
    option name 'wan6_231'
    option type 'macvlan'
    option ifname 'eth0'

# For PV4 Only
 config device 'wan'
    option name 'wan'
    option type 'macvlan'
    option ifname 'eth0'

然後修改 /etc/config/network,重啓之後就多了4個設備,然後就可以把一個lan加進去,剩下的可以通過網頁的UI加,所以在上面的文件增加下面的内容。

bash
config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth1'

config interface 'lan'
        option device 'eth1'
        option proto 'static'
        option ipaddr '192.168.31.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.1.1'

image

0x3 為每個設備設置接口

由於只是虛擬了設備,虛擬好了設備需要設置好接口才可以使用,對於 wan6_231 的設備增加一個interface為 wan6_231i

image

需要修改的如下:

  • General Settings - Request IPv6-address: force
  • Advanced Settings - Delegate IPv6 prefixes: Yes
  • Firewall Settings: 改成wan
  • DHCP Server 不需要設置

image

wan6_231wan6_232wan6_31 也是重複上面的操作,wan 就根據實際情況修改即可。

0x4 為每個真實的設備鏈接 wan6 的接口

首先設置好最基本的 lan31lan231lan232,在網絡基本互通的情況下進行以下設置

對於 lan231 來説,

image

防火墻設置改成lan區域,DHCP 如下設置

image

0x5 完成設置

image

231 網段測試

image

232 網段測試

image

0x6 openwrt 動態 ipv6 防火墻設置方法

image

因爲家用的ipv6是會變的,結尾的后四組是90c6:bfff:fe39:6990,新的ipv6地址只會變更前面的4組數字,所以防火墻可以設置 ::90c6:bfff:fe39:6990/::ffff:ffff:ffff:ffff,這樣就可以從外網訪問進來了。

image

ipv6 设置方法跟 ipv4 不一样,它的地址比较长,由八组字母数字组成 [1:2:3:4:5:6:7:8,一般情况下,拨号获得的 ipv6 地址前四段变化,后四段是根据本地 mac 网卡来的,所以后四段不变。那么 ipv6 防火墙目标地址就用通配符来设定,[0:0:0:0:5:6:7:8/0:0:0:0:ffff:ffff:ffff:ffff,前面 0:0:0:0 缩写成两个”::”, 所以目标地址填写 [::5:6:7:8/::ffff:ffff:ffff:ffff], 其中 5:6:7:8 是所指向 lan 被访问主机 ipv6 地址的后四段。

參考:openwrt ipv6 防火墙设置方法

0xA 參考:完整的 /etc/config/network 配置文件

bash
config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd63:ec3f:cba7::/48'
        option packet_steering '1'

config device 'wan'
        option name 'wan'
        option type 'macvlan'
        option ifname 'eth0'

config device 'wan6_31'
        option name 'wan6_31'
        option type 'macvlan'
        option ifname 'eth0'

config device 'wan6_231'
        option name 'wan6_231'
        option type 'macvlan'
        option ifname 'eth0'

config device 'wan6_232'
        option name 'wan6_232'
        option type 'macvlan'
        option ifname 'eth0'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth1'

config interface 'lan'
        option device 'eth1'
        option proto 'static'
        option ipaddr '192.168.31.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.1.1'
        list ip6class 'wan6_31i'

config interface 'wan1'
        option proto 'static'
        option device 'wan'
        option ipaddr '192.168.1.4'
        option netmask '255.255.255.0'
        option gateway '192.168.1.1'
        list dns '114.114.114.114'

config interface 'lan231'
        option proto 'static'
        option device 'eth2'
        option ipaddr '192.168.231.1'
        option netmask '255.255.255.0'
        option gateway '192.168.1.1'
        list ip6class 'wan6_231i'
        option ip6assign '64'

config interface 'lan232'
        option proto 'static'
        option device 'eth3'
        option ipaddr '192.168.232.1'
        option netmask '255.255.255.0'
        option gateway '192.168.31.1'
        list ip6class 'wan6_232i'
        option ip6assign '64'

config interface 'wan6_31i'
        option proto 'dhcpv6'
        option device 'wan6_31'
        option reqaddress 'force'
        option reqprefix 'auto'

config interface 'wan6_231i'
        option proto 'dhcpv6'
        option device 'wan6_231'
        option reqaddress 'force'
        option reqprefix 'auto'

config interface 'wan6_232i'
        option proto 'dhcpv6'
        option device 'wan6_232'
        option reqaddress 'force'
        option reqprefix 'auto'

0xB 參考

  1. IPv6 原理及如何设置 OpenWrt
  2. OpenWRT 路由器 IPv6 实战配置长篇教程:纠正你的 IPv4 思维!

Copyright © 2016-2026 manesec. All rights (include theme) reserved.