LoginSignup
5
4

More than 5 years have passed since last update.

【NAT64】[Jool] Linuxだけで実装するNAT64(設計・構築編)

Last updated at Posted at 2016-08-31

1. はじめに

去る2016.08.20に開催されましたiOSDC(iOS Developers conference)にて、
このカンファレンスで使えるWi-Fiネットワークの構築にCONBUメンバーとして参画し、
ありがたくもNAT64の実装に携わってきました。
聞くところによりますと、(省略:前回記事をご覧ください)

概要編ではJoolというNAT64コンポーネントを採用したと述べました。
本記事ではJoolを構築し動かすまでを記載します。

Jool: https://jool.mx/en/index.html
なお、手順は公式ページのInstallationに概ね準拠しています。

また、iOSとIPv6とのトピックはiOSDC関連まとめの中では
結構なヒット作となっておられます、以下もご覧いただけるとより楽しめるかと思います。
# IPv6に関するプログラミングアンチパターンが面白いんじゃよ。

■IPv6 Readyって何?NAT64/DNS64徹底解説
■上記の発表資料はこちら

2. 構築環境

items version notes
Linux OS ubuntu 14.04.5 LTS 母艦OS
kernel release 4.2.0-27-generic kernel moduleなので明記
Jool 3.4.4 2016/07時点latest
git 1.9.1 Joolのcloneに

ちなみに、dockerizeにも挑戦しましたが、
ubuntuのofficial docker imageのkernel versionに対応する
kernel headerを見つけきれずに断念しました。未熟未熟ゥ!

3. 設計

これを見つつ、Joolの役割を考えると
「DNS64で付与されたwell-known-prefix向けの通信をipv4に変換するGW」
として機能させればよいことがわかります。
well-known-prefixとは64:ff9b::/96になります。
dest IPが64:ff9b::/96の通信を吸い込んでIPv4にNATしてやるという挙動です。

そのため、以下の項目を設計します。

  • クライアント通信受信用IPv6アドレス
  • Joolのインターネットアクセス用IPv4アドレス
    • 上記を踏まえNICは2つ必要
  • IPv6通信用GW
  • IPv4通信用GW
  • 周辺の設計として64:ff9b::/96宛の通信をJool稼働マシンにrouting

4. 構築

大まかな構築項目は以下の3つです。

  1. 必要なパッケージのインストール
  2. Joolのインストール
  3. Jool ユーザスペースアプリのインストール

これに沿って進めていきます。

1. 必要なパッケージのインストール

  • OSのアップデート・アップグレード
    セキュリティ対策的な感じでやっておきます。

    $ sudo apt-get update
    $ sudo apt-get upgrade
    
  • パッケージインストール
    必要なパッケージは次の通りです。

    name way to use
    git Joolのcloneに
    dkms kernel moduleのインストールに利用
    build-essential 公式準拠
    linux-headers 公式準拠
    autoconf ユーザスペースアプリインストールに必要
    pkg-config 同上
    libnl-3-dev 同上

    インストールコマンドはこんな感じでババッと。

    パッケージインストール
    $ sudo apt-get install git
    $ sudo apt-get install dkms
    $ sudo apt-get install build-essential
    $ sudo apt-get install linux-headers-$(uname -r)
    $ sudo apt-get install autoconf
    $ sudo apt-get install pkg-config
    $ sudo apt-get install libnl-3-dev
    

2. Joolのインストール

  • Joolの取得とインストール
    ホームディレクトリにcloneしてしまってよいです。
    そのあとはdkmsでインストールします。

    Joolのインストール
    $ cd
    $ git clone https://github.com/NICMx/Jool.git
    $ sudo dkms install Jool
    

3. Jool ユーザスペースアプリのインストール

  • ユーザスペースアプリとは?
    Joolの起動状態やセッションテーブル等を確認するためのツール(コマンド群)です。
    こう書いてあるので、直訳しただけ。

  • インストール
    公式通りこういう感じで、サックリと
    だと不親切すぎるので、ちょっと解説します。
    git cloneしたフォルダ構成のうち、Jool/usr配下にユーザスペースアプリインストール用の資材が格納されています。
    ですので、cd Jool/usrした後に以下コマンドでインストール。

    ユーザスペースアプリのインストール
    $ cd ~/Jool/usr
    $ ./autogen.sh
    $ ./configure
    $ make
    $ sudo make install
    

起動方法ですが、

$ sudo modprobe jool pool6=64:ff9b::/96 pool4=$YOUR_IPV4_ADDR

で起動します。
sudo make installしたので、root権限が必要です。

以下のコマンド・出力を得られれば、ユーザスペースアプリも正常に動いています。
ユーザスペースアプリも、sudo権限が必要なコマンドがあります。

$ sudo jool -s
~~ (中略) ~~
TCP:
---------------------------------
(empty)
UDP:
---------------------------------
(empty)
ICMP:
---------------------------------
(empty)

5. つづく

ここまではよかったんですが、さすがに色々チューニングしました。
運用ってほんとうに大事ですね。というわけで、
まじめにほんとうに大事な運用周りは次回記事で。

5
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
5
4