概要
IPv6ネットワークではルータより配信されているra(router advertisement)のmフラグ、oフラグによりホストのIPアドレスの配布・アサイン方法が異なる。
mフラグ | oフラグ | 分類 | IPアドレス配布方法 | サーバ情報 |
---|---|---|---|---|
ON | ON | ステートフルDHCPv6 | DHCPv6 | DHCPv6 |
ON | OFF | ステートレスDHCPv6 | RA | DHCPv6 |
OFF | ON | ステートフル | DHCPv6 | 手動 |
OFF | OFF | ステートレス | RA | 手動 |
IPアドレスの配布/アサイン方法としてはRAを元にホスト側で生成するステートレスまたはDHCPv6サーバより配布されるステートフルがある。
IPアドレスとは別にサーバ情報(DNS,NTPサーバ等)はDHCPv6で配布するかホストで手動で設定となる。(RAではサーバ情報は配布されない)
環境
- osxのmultipass上で動作するUbuntu20.04
ステートレスによるIPv6アドレスアサインの検証
linux network namespaceを用いて検証する。network namespaceを作成する。ここではlan-router-wanの3つのnamespaceを作成する。
- radvdのインストール
sudo apt-get install radvd
- 検証環境構築
sudo ip netns add lan
sudo ip netns add router
sudo ip netns add wan
sudo ip link add lan-veth0 type veth peer name gw-veth0
sudo ip link add wan-veth0 type veth peer name gw-veth1
sudo ip link set lan-veth0 netns lan
sudo ip link set wan-veth0 netns wan
sudo ip link set gw-veth0 netns router
sudo ip link set gw-veth1 netns router
sudo ip netns exec lan ip link set lan-veth0 up
sudo ip netns exec wan ip link set wan-veth0 up
sudo ip netns exec router ip link set gw-veth0 up
sudo ip netns exec router ip link set gw-veth1 up
- WAN側環境でIPv6の転送を有効化
sudo ip netns exec wan sysctl -w net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.forwarding = 1
- ルータにてRAの受信を有効化
sudo ip netns exec router sysctl -w net.ipv6.conf.gw-veth1.accept_ra=2
net.ipv6.conf.gw-veth1.accept_ra = 2
- WANのネットワークインタフェースに手動でグローバルアドレスを設定
sudo ip netns exec wan ip addr add 2001:db8::1/64 dev wan-veth0
sudo ip netns exec wan ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: wan-veth0@if5: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0a:61:ff:c6:c6:d1 brd ff:ff:ff:ff:ff:ff link-netns router
inet6 2001:db8::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::861:ffff:fec6:c6d1/64 scope link
valid_lft forever preferred_lft forever
- radvdの設定
cat /etc/radvd.conf
interface wan-veth0{
AdvSendAdvert on;
AdvManagedFlag off; # Mフラグ Off
AdvOtherConfigFlag off; # Oフラグ Off
prefix 2001:db8::/64{};
};
- radvd起動
sudo ip netns exec wan sudo radvd
- router側でIPアドレスのアサインを確認。
sudo ip netns exec router ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: gw-veth0@if4: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d6:35:44:4a:15:6a brd ff:ff:ff:ff:ff:ff link-netns lan
inet6 fe80::d435:44ff:fe4a:156a/64 scope link
valid_lft forever preferred_lft forever
5: gw-veth1@if6: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether f2:dd:83:fe:62:c4 brd ff:ff:ff:ff:ff:ff link-netns wan
inet6 fe80::f0dd:83ff:fefe:62c4/64 scope link
valid_lft forever preferred_lft forever
sudo ip netns exec router ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: gw-veth0@if4: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d6:35:44:4a:15:6a brd ff:ff:ff:ff:ff:ff link-netns lan
inet6 fe80::d435:44ff:fe4a:156a/64 scope link
valid_lft forever preferred_lft forever
5: gw-veth1@if6: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether f2:dd:83:fe:62:c4 brd ff:ff:ff:ff:ff:ff link-netns wan
inet6 2001:db8::f0dd:83ff:fefe:62c4/64 scope global dynamic mngtmpaddr
valid_lft 86399sec preferred_lft 14399sec
inet6 fe80::f0dd:83ff:fefe:62c4/64 scope link
valid_lft forever preferred_lft forever
ステートフルDHCPv6によるIPv6アドレスアサインの検証
linux network namespaceを用いて検証する。network namespaceを作成する。ここではlan-router-wanの3つのnamespaceを作成する。
- 検証環境構築
sudo ip netns add lan
sudo ip netns add router
sudo ip netns add wan
sudo ip link add lan-veth0 type veth peer name gw-veth0
sudo ip link add wan-veth0 type veth peer name gw-veth1
sudo ip link set lan-veth0 netns lan
sudo ip link set wan-veth0 netns wan
sudo ip link set gw-veth0 netns router
sudo ip link set gw-veth1 netns router
sudo ip netns exec lan ip link set lan-veth0 up
sudo ip netns exec wan ip link set wan-veth0 up
sudo ip netns exec router ip link set gw-veth0 up
sudo ip netns exec router ip link set gw-veth1 up
- WAN側環境でIPv6の転送を有効化
sudo ip netns exec wan sysctl -w net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.forwarding = 1
- ルータにてRAの受信とsolicitを有効化
sudo ip netns exec router sysctl -w net.ipv6.conf.gw-veth1.accept_ra=2
sudo ip netns exec router sysctl -w net.ipv6.conf.gw-veth1.router_solicitations=1
- WANのネットワークインタフェースに手動でグローバルアドレスを設定
sudo ip netns exec wan ip addr add 2001:db8::1/64 dev wan-veth0
sudo ip netns exec wan ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: wan-veth0@if5: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0a:61:ff:c6:c6:d1 brd ff:ff:ff:ff:ff:ff link-netns router
inet6 2001:db8::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::861:ffff:fec6:c6d1/64 scope link
valid_lft forever preferred_lft forever
- radvdの設定
cat /etc/radvd.conf
interface wan-veth0{
AdvSendAdvert on;
AdvManagedFlag on; # Mフラグ On
AdvOtherConfigFlag on; # Oフラグ On
prefix 2001:db8::/64{};
};
- radvd起動
sudo ip netns exec wan sudo radvd
- DHCPサーバの起動
isc-dhcpが起動しなかった(dhcpd6.leases: Permission denied)のでwide-dhcpv6を起動。
sudo apt-get install wide-dhcp-server
cat /etc/dhcp6s.conf
interface wan-veth0 {
address-pool pool1 3600;
};
pool pool1 {
range 2001:db8:1:2::1000 to 2001:db8:1:2::2000 ;
};
sudo ip netns exec wan dhcp6s -c /etc/dhcp6s.conf wan-veth0
- DHCPクライアントの起動
こちらはisc-dhcpclientを用いる。
sudo apt-get install isc-dhcp-server
cat /etc/dhcp/dhclient6.conf
interface "gw-veth1" {
send dhcp6.client-id DUID;
}
sudo ip netns exec router dhclient -cf /etc/dhcp/dhclient6.conf -6
- IPアドレスの確認。radvdで設定したアドレスではなく、dhcpv6サーバで設定した払い出しアドレスがアサインされていることが確認できる。
sudo ip netns exec router ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: gw-veth0@if4: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b2:d6:b2:55:46:9c brd ff:ff:ff:ff:ff:ff link-netns lan
inet6 fe80::b0d6:b2ff:fe55:469c/64 scope link
valid_lft forever preferred_lft forever
5: gw-veth1@if6: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 56:be:de:cc:b2:28 brd ff:ff:ff:ff:ff:ff link-netns wan
inet6 2001:db8:1:2::1000/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::54be:deff:fecc:b228/64 scope link
valid_lft forever preferred_lft forever