アンケート
- AKB48
- SKB SocKet Buffer(今日の話はココ)
- PCB Process Control Block(プロセスの状態をあらわすデータ構造)
- UNPCB Unix Protocol Control Block ソケット
アジェンダ
nftablesについてしゃべる
@s1061123
- nftablesには関係がない
nftables
- LinuxCon2015に似たタイトルの発表がある
nftablesとは
netfilter/iptables project homepage - The netfilter.org "nftables" project
- パケットフィルタリングコマンド
- iptablesと同様にnetfilterを使用している
netfilterとは
- netfilter パケットを書き換えるフレームワーク
- iptablesもnetfilterを使っている(firewalldもこれ)
- netfilterはLinuxカーネル内でネットワークのパケットを書き換えることが出来る
ip ip6 arp eb tables?
- 各プロトコルについて、コマンドが存在する
なぜnftables?
- 技術的負債の解消
パフォーマンスの向上
iptablesができたのは1999 で16年
- 70以上のモジュールがあって、つぎ足しつぎ足し秘伝のタレ
- プロトコルごとに別コマンド
シンタックスルールも複雑化
iptablesのパフォーマンス問題
- ルールセット追加削除がアトミック チェインに対して、カーネルからユーザランドにコピーするから遅い
- ルールをすべて拾って読んでいれかえる、という作業をやっている
ルールが増えれば処理が重くなる
2008に開発
- 2012のnetfilter.orgの人がiptables互換レイヤー
- 2014/1カーネルメインラインにマージ
使い方
- カーネルにNF_TABLES(と好きなオプションをつけてビルド)
- iptablesを使う場合はiptablesを止める
- ルールの追加は以下のように。iptablesだと全部1行だった。構造化できる
table ip filter { chain input { .... } chain forward { .... } }
フロー
- 関連ライブラリ nft-rule-getを見る
- バークレーパケットフィルタ(BPF)からインスパイア
- フィルタリング実装はpseudo-state machineとして実装されている
- パケットに必要なフィルタリングや計算の機能が載っている
VMコードの読み方
- nft-rule-get
- ペイロードのところが命令
- レジスタのところにロード
- パケットの中に存在しない情報を、load oifでとることができる
カーネル内のnftablesのフィルタリング実装は、bpfインスパイアな、pseudo-state machineとして実装している。 #kernelvm
— 赤提灯 (@akachochin) 2015, 6月 6
nftablesの設定はユーザ空間でコンパイルしてbpfライクな命令列に変換してからカーネルに送られる、と #kernelvm
— Fadis (@fadis_) 2015, 6月 6
- libnftnlをつかうことでnftablesのルールを追加したり削除したり出来る
- Netlink(libnml)でカーネルに送信
宣伝
- MiniUPnPがnftablesをサポート
- MiniUPnPはNATの内側からforwardingの穴を簡単にあけられるNATむけのIGDの実装
- UPnPなくても安心
まとめ
nftablesを使おう!
質疑
Q. VMのコードはチューリング完全かどうか? A. 入出力にあたるものが微妙。あとレジスタに加算する命令がない。カウンターというものがあるで頑張れば入力はいけそう。出力は工夫したらできるような気もするが確証はない #kernelvm
— NOKUBI Takatsugu野首貴嗣 (@knok) 2015, 6月 6