1. はじめに
去る2016.08.20に開催されましたiOSDC(iOS Developers conference)にて、
このカンファレンスで使えるWi-Fiネットワークの構築にCONBUメンバーとして参画し、
ありがたくもNAT64の実装に携わってきました。
聞くところによりますと、(省略:前々回記事をご覧ください)
概要編ではJoolというNAT64コンポーネントを採用したと述べました。
設計・構築編ではJoolを起動させるところまで述べました。
本記事では、動作検証しつつ取り入れた運用系のノウハウを書き連ねたいと思います。
Jool: https://jool.mx/en/index.html
なお、iOSとIPv6とのトピックはiOSDC関連まとめの中では
結構なヒット作となっておられます、以下もご覧いただけるとより楽しめるかと思います。
IPv6に関するプログラミングアンチパターンが面白いんじゃよ。
■IPv6 Readyって何?NAT64/DNS64徹底解説
■上記の発表資料はこちら
2. 運用結果サマリ
結論から先に書きますが、個人的にはJoolによるNAT64ネットワークはある程度実用に耐えうるものだったとみています。
500人以上の来場者で、最大200クライアントほどの接続があり、最大6,000セッションくらいの同時接続があっても無事6 to 4のインターネット接続を提供することができていたようです。
なお、いくつかのアプリケーションがうまく動かなかったというのは結果としてありました。
この辺のお話は、こちらの記事でもご確認いただけると思います。
3. Joolの起動
$ sudo modprobe jool pool6=64:ff9b/96 pool4=$YOUR_IPV4_ADDR
前回記した通り上記のコマンドでJoolが起動します。
ただし、NATに利用するポートにwell-known-portが含まれるなど
結構攻め気味の起動の仕方をするので、イベントにおいては以下のコマンドで調整しました。
$YOUR_IPV4_ADDRを192.168.0.100と仮決めして記載します。
$ sudo jool --pool4 --remove 192.168.0.100 1-9999
$ sudo jool --handle-rst-during-fin-rcv true
$ sudo jool --maximum-simultanous-opens 5000
$ sudo jool --logging-session true
《解説》
1行目 - 1-9999portをNAT処理時の割り当てportから除外(TCP/UDP/ICMP全てに適用される)
2行目 - RSTが飛んできたときに残存セッションを捨てる設定
3行目 - 同時にオープン出来るセッション数を引き上げる(default 128)
4行目 - sessionログをsyslogに吐く
また、OS側でサチらないように、kernel parameterを1ついじりました。
$ sudo sysctl -w net.core.somaxconn = 1024
4. Joolの状態確認
起動しましたら、ユーザスペースアプリのコマンド群を駆使して稼働状況を確認できます。
以下に列記しますが、コマンドリファレンスのようなものが公式にもバッチリございます。
-
poolの一覧確認
$ sudo jool --pool4 --display
-
TCP/UDP/ICMP 現在のセッション数確認
$ jool -c -s
-
セッションテーブルの確認
$ sudo jool --session
-
poolのflush(セッションテーブルのflush)
$ sudo jool --pool4 --flush 192.168.0.100
-
poolアドレスの追加
$ sudo jool --pool4 --add 192.168.0.100 37268-65535
-
Joolの停止
$ sudo modprobe -r jool
5. ついでにZabbix_Senderでセッション数監視
zabbix_agentのzabbix_senderコマンドを用いて、グラフでのセッション監視もやってみました。
ブツはこちらですが、詳しいやり方は別の記事にしたいと思います。
6. あとがき
技術的に知ってはいても、一般の皆さまにお使いいただくネットワークとしてIPv6移行系の実装はなかなか自分の手ではやる機会がないので非常によい経験になりました。
そういうproduction環境に近しいエンジニアリングを求めてやまない方は、
ぜひCONBUの活動をマークしていていただけると幸いです。
twitter: @conbu_net
■CONBUの正体