DS-Liteをとりあえず試すために1NICで接続環境を作る

下記ブログにてVyOS1.2を利用する手順が紹介されていますので、そちらもご覧ください。
「[VyOS 1.2以降を使ってIPv4 over IPv6(DS-Lite)トンネルマシンを作ってみる | Road Station Oume-Kaido](https://en-g.way-nifty.com/road_station_oumekaido/2020/03/post-3c4bdd.html)」

# 注意事項

本記事ではファイアウォールの設定をすっ飛ばしています。
既存でHGWやルータがあるのならば、それがある程度はフィルタリングしてくれている場合もありますが、本運用する場合はファイアウォールの設定を忘れないようご注意ください。

また、IPv6アドレスの撒き方がわからなかったことと、下記接続のイメージでは不要であったことからIPv6アドレス広告とかそこらへんは記載していません。
そのため、ルータをVyOSに置き換えた場合、VyOS下の機器にはIPv6アドレスは割り当てられません。

あくまでお試しとして速度測定ぐらいに止め、本運用する場合は市販の対応ルーターを買った方が幸せになります。

たぶん本記事は今後の更新はありません。

# 目的
IIJmioやInterlinkで提供しているDS-Liteについて、対応ルーターを持っていなくてもお試しで接続できるように、
無料のLinuxベースのルータOSである[VyOS](https://vyos.io/)を利用しつつ、かつ2NICの専用マシンを準備しなくても接続を試せる手順について記載する。

![図1](http://drive.google.com/uc?id=0B8VxOxYyM6tYakpUYVVlUTBhdVU "図1")

# 注意事項
## 今回記載の環境について
速度テストをする程度までのお試し環境を作ることを目的としているので、ファイアーウォールの設定は省略します。
特にONU直結だとIPv6でPCにダイレクトなので注意してください。ついでにDNSもモロ空きです。
ルータが入っているなら、それである程度防がれるかもしれませんが必ずしも効果を保証するものではありません。

## IPv6環境について
ひかり電話の有無やNTT東西で細かいところが変わります。
本記事に記載の内容は、NTT東のフレッツネクストで、ひかり電話なしの環境で試しています。

# 準備物
[VyOS](https://vyos.io/)
VyOSをインストールするためのデータが飛んでもいいPCまたは仮想環境
Windows PC
「[IIJmio FiberAccess/NF](https://www.iijmio.jp/guide/outline/nbd/)」または「[IIJmioひかり + IPoEオプション](https://www.iijmio.jp/imh/cost.jsp)」または「[Interlink ZOOT NATIVE](http://www.interlink.or.jp/service/zootnative/index.html)」などの、「[インターネットマルチフィードのtransixサービス](http://www.mfeed.ad.jp/transix/)でIPv6 IPoE接続を提供するプロバイダ」

非対応のプロバイダを利用している場合でも、PPPoEを利用するプロバイダとIPoEを利用するプロバイダの併用は可能です。
Interlinkなら無料期間があるので試しやすいかもしれないです。
なお、申し込みにはフレッツ開通時に届く書類に記載される、お客様IDとアクセスキーが必要です。

## 事前準備
PCがIPv6で外に出られる状態であることを確認しておく。
ルーターやHGWがある場合は、IPv6ブリッジやパススルーなどの名称の機能を有効化する必要があります。

# VyOSのインストール
## 仮想マシンの設定
[VirtualBox](https://www.virtualbox.org/wiki/Downloads)にインストールしますが、VirtualBoxのインストールは省略します。

新規の仮想マシンを作成し、仮想マシンの「タイプ/バージョン」を「Linux/Ubuntu(64-bit)」とし、メモリサイズやディスク容量はデフォルトのままで作成します。
作成後に仮想マシンの設定を開き、ネットワークアダプタの設定を以下の通り変更します。

- 割り当て：ブリッジアダプター
- 名前：ネット側に接続されるインタフェース
- アダプタータイプ：1000MTか準仮想化
![](https://drive.google.com/uc?id=0B8VxOxYyM6tYMGRscFVKem9xQ28)
設定保存後、仮想マシンを起動し、VyOSのイメージからブートさせます。

## イメージインストール
ユーザー名/パスワードの初期値は「vyos」でログインします。
以降、時折出てくる「INIT: Id "TO" respawning too fast: disabled for 5 minutes」は今は無視して問題ありません。

インストールを実行します。

```bash
vyos@vyos:~$ install image
（中略）
Would you like to continue? (Yes/No) [YES]: [そのままエンター]
（中略）
Partition (Auto/Parted/Skip) [Auto]: [そのままエンター]
（中略）
Install the image on? [sda]: [そのままエンター]

This will destroy all data on /dev/sda.
Continue? (Yes/No) [No] : [「Yes」と入力してエンター]

How big of a root partition should I create? (1000MB - 10737MB) [10737]MB: [そのままエンター]
（中略）
What would you like to name this image? [1.1.7]: [そのままエンター]
（中略）
Which one should I copy to sda? [/config/config.boot]: [そのままエンター]
（中略）
Enter password for user 'vyos': [設定するパスワードを入力してエンター]
Retype password for user 'vyos': [もう一度パスワードを入力してエンター]
（中略）
Which drive should GRUB modify the boot partition on? [sda]: [そのままエンター]

Setting up grub: OK
Done!
vyos@vyos:~$ poweroff
Proceed with poweroff? (Yes/No) [No] [Yesと入れてエンター]
（中略）
（仮想マシン終了）
```

仮想マシンが終了したら、ISOイメージを取り出したあと、再度仮想マシンを起動します。

## 初期の細かい設定
キーボード設定、時間帯設定、シリアルコンソール無効化、IPアドレス設定、SSHの有効化を行っておきます。

```bash
Welcome to VyOS - vyos tty1

vyos login: vyos
Password: [先ほど設定したパスワード]
（中略）
vyos@vyos:~$ set console keymap

[Generic 105-key (Intl) PC] -> [Other] -> [Japan] -> [Japan] ->
 [The default for the keyboard layout] -> [No compose key]

vyos@vyos:~$ conf
vyos@vyos# set system time-zone Asia/Tokyo
vyos@vyos# delete system console
vyos@vyos# set interfaces ethernet eth0 address '192.168.0.1/24'
vyos@vyos# set service ssh listen-address 192.168.0.1
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit
vyos@vyos:~$ 
```
# DNSの設定
NGN網内のDNSサーバを面倒なので直接指定します。
ついでに、ルーターの代わりに名前解決に対応できるようにDNSフォワードの設定を入れます。
踏み台が怖い場合は「set service dns ～」の二行は省略して、別のDNS設定を使ってください（後述）

```bash
vyos@vyos:~$ conf
vyos@vyos# set system name-server '2404:1a8:7f01:a::3'
vyos@vyos# set system name-server '2404:1a8:7f01:b::3'
vyos@vyos# set service dns forwarding listen-on 'eth0'
vyos@vyos# set service dns forwarding 'system'
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit
vyos@vyos:~$ 
```

# IPv6設定/確認
VyOSがIPv6アドレスを受け取るように設定します。

```bash
vyos@vyos:~$ conf
vyos@vyos# set system ipv6 'disable-forwarding'
vyos@vyos# set interfaces ethernet eth0 ipv6 address 'autoconf'
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit
vyos@vyos:~$ 
```

ひかり電話がある場合でHGWの下に居る場合は「set interfaces ethernet eth0 address dhcpv6」も必要かもしれません。

IPv6アドレスが割り当てられたことを確認します

```bash
vyos@vyos:~$ sh int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.0.1/24                    u/u
                 2409:x:x:x:1234:5678:90ab:cdef/64
lo               127.0.0.1/8                       u/u
                 ::1/128
vyos@vyos:~$ 
```

このIPv6アドレスは後で使うので、コピってメモ帳にでも貼り付けておいてください。

# DS-Liteのトンネル張りと経路設定
DS-LiteのIPIPトンネルを張り、IPv4はそっちへ流れるように経路設定します。
接続先は「gw.transix.jp」ですが、ホスト名指定できないので「2404:8e00::feed:100」か「2404:8e00::feed:101」のどちらかを適当に選択します。
なお、NTT東西でアドレスは変わる事と、将来的に変更になる場合もあるので、[ここ](http://www.mfeed.ad.jp/transix/ds-lite/contents/yamaha_nvr500.html)を見たり、hostやdigを叩いて確認してください。

```bash
vyos@vyos:~$ conf
vyos@vyos# set interfaces tunnel tun0 encapsulation 'ipip6'
vyos@vyos# set interfaces tunnel tun0 local-ip '2409:x:x:x:1234:5678:90ab:cdef'
vyos@vyos# set interfaces tunnel tun0 mtu '1500'
vyos@vyos# set interfaces tunnel tun0 remote-ip '2404:8e00::feed:100'
vyos@vyos# set protocols static interface-route 0.0.0.0/0 next-hop-interface 'tun0'
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit
vyos@vyos:~$ 
```

二行目のlocal-ipは先ほどコピペしたもの。
Linux系は自身のアドレスを指定しておかないとダメな仕様っぽいので、アドレスが変わったらその時にまた考えましょう。

# IPv4疎通確認
とりあえずGoogleにPingを飛ばしてみます。
ここまで設定すればVyOSはDS-Lite経由でIPv4に出ていけます。

```bash
vyos@vyos:~$ ping www.google.com count 4

PING www.google.com (172.217.25.68) 56(84) bytes of data.
64 bytes from nrt13s50-in-f4.1e100.net (172.217.25.68): icmp_req=1 ttl=57 time=9.10 ms
64 bytes from nrt13s50-in-f4.1e100.net (172.217.25.68): icmp_req=2 ttl=57 time=5.63 ms
64 bytes from nrt13s50-in-f4.1e100.net (172.217.25.68): icmp_req=3 ttl=57 time=7.55 ms
64 bytes from nrt13s50-in-f4.1e100.net (172.217.25.68): icmp_req=4 ttl=57 time=5.76 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 5.638/7.013/9.100/1.427 ms

vyos@vyos:~$ 
```

ついでに、経路も確認してみます

```bash
vyos@vyos:~$ traceroute www.mfeed.ad.jp

Resolving Address: www.mfeed.ad.jp
traceroute to www.mfeed.ad.jp (210.173.170.40), 30 hops max, 60 byte packets
 1  ike-gw00.transix.jp (14.0.9.66)  4.048 ms  4.557 ms  4.557 ms
 2  ike-bbrt10.transix.jp (14.0.9.65)  5.229 ms  5.216 ms  5.210 ms
 3  ike-gate1.nw.mfeed.ad.jp (14.0.10.2)  5.042 ms  4.052 ms  4.145 ms
（以下略）
vyos@vyos:~$ 
```

普段使っているプロバイダではなく、transix.jpを通っています。

# PCの設定変更と確認くん
PCのDNSサーバとデフォルトゲートウェイをVyOS側に向けます。
DNSフォワードの設定を入れていない場合は、既存のルーターとかを設定してください。PPPoE接続してるなら大体生き残ってます。たぶん。
![図2](http://drive.google.com/uc?id=0B8VxOxYyM6tYSXNJSjdjR3NuRlk "図2")

最後に[確認くん](http://www.ugtop.com/spill.shtml)にでもアクセスすると、ホスト名がプロバイダと別になっているのが判ると思います。
![図3](http://drive.google.com/uc?id=0B8VxOxYyM6tYcXpBdXREYVBjakU "図3")

あとは好きに速度テストをやって評価してみてください。
![図4](https://drive.google.com/uc?id=0B8VxOxYyM6tYTHloYlZmV09aQjg "図4")
![図5](https://drive.google.com/uc?id=0B8VxOxYyM6tYR2lfVWN5SkxwS3M "図5")

#最後に
とりあえずお試し環境なので、1ポートで賄っています。
なので、2ポートでLANとWANを分ける一般的なやり方よりも速度が落ちる傾向にあります。
それでも混雑していると思われる日曜19:00台の速度テストで600Mbps出ていたので（なおPPPoEだと40Mbpsでした）もっとDS-Lite流行れ。


# 参考元
[VyOSでIIJmioにDS-Lite接続（ひかり電話契約なし）](http://qiita.com/onigiri8441/items/a40bc9a6d7603bf74542)