1
4

More than 1 year has passed since last update.

LinuxにおけるIPv6のアドレスアサイン方法①

Last updated at Posted at 2022-06-12

概要

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
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4