Hydrogen → Helium での
Linux kernel の違い
浅間 正和 @ 有限会社 銀座堂
VyOS の話しません
はじめに
• こんな内容
• net の中で起きた VyOS に影響がありそうな変更を紹介
• net の中でも TCP fast open 等 VyOS の機能にはそんなに影
響がなさそうなものは今回は除外
• 動機
• Helium で Linux kernel のバージョンが 3.13 にあがるらしい
• ちなみに Hydrogen は 3.3 だった
• net 周りでどんな違いがあるのか調べてみたい
• 注意
• この発表はあくまで Linux kernel の違いであってここで紹介する
機能が VyOS でサポートされるという意味ではないです
• でも CLI さえ作れば簡単に組み込むことはできると思います
• 欲しい機能があったらこの後の @hiroysato さんの発表を参考に
自分で組み込んでみよう!
3
L2TPv3 over IPv6 のサポート
• 概要
• Linux kernel 3.4 以前では L2TPv3 のトランスポートに IPv4 し
か利用できなかったが IPv6 でもできるようになった
• Unmanaged L2TPv3 として設定する場合は以下のように
iproute2 コマンドを実行
!
!
!
!
!
!
• 変更されたバージョン
• Linux kernel 3.5
# modprobe l2tp_ip6
# modprobe l2tp_eth
# ip l2tp add tunnel remote 2001:db8:123::123 
local 2001:db8:234::234 
tunnel_id 123 peer_tunnel_id 123 encap ip
# ip l2tp add session name l2tpeth0 tunnel_id 123 

session_id 123 peer_session_id 123
4
IPv4 ルーティング・キャッシュ機能廃止
• 概要
• IPv4 のルーティングではいちど探索したルーティング・テーブル
のエントリーをキャッシュしておくことで同一フローのパケットの
探索処理を高速化する仕組みがあった
• お行儀の良いパケットしか受け取らないのであれば問題はないが
DoS 攻撃を受けると悲しいことになるということで削除された
• 変更されたバージョン
• Linux kernel 3.6
5
IPv4 ルーティング・キャッシュ機能廃止
1flow 256flow 65,536flow 16,777,216flow 2,147,483,648flow
Internet Week 2010 S7 Vyatta ∼仮想世界をになうルーター∼
『Vyatta 徹底評価!』の資料より引用
https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s7/iw2010-s7-03.pdf
6
IPv4 ルーティング・キャッシュ機能廃止
Internet Week 2010 S7 Vyatta ∼仮想世界をになうルーター∼
『Vyatta 徹底評価!』の資料より引用
https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s7/iw2010-s7-03.pdf
7
VXLAN 機能の追加
• 概要
• 乱立する NVO3(Network Virtualization Over L3)技術のうち
現在 IETF で標準化が進められている VXLAN が実装された
• iproute2 コマンドで以下のように実行することで利用できる
!
!
!
• 上記のコマンドを実行すると vxlan0 という名前の仮想イーサネッ
ト・インターフェースが作成される
• eth0 上の 239.1.1.123 というマルチキャスト・グループに参加し
ブロードキャストやマルチキャスト等のフレームはカプセル化後に
このマルチキャスト・アドレス宛に送信される
• 変更されたバージョン
• Linux kernel 3.7
# ip link add vxlan0 type vxlan 
id 123 group 239.1.1.123 dev eth0
8
IPv6 で ECMP のサポート
• 概要
• IPv4 ですでにサポートされていた Equal Cost Multi-Path(ECMP
:同一の宛先プレフィクスで異なるネクスト・ホップのルーティン
グ・テーブル・エントリーを複数登録してトラヒックを分散させる
ための技術)が IPv6 でもサポートされた
• 以下の情報のハッシュ値からネクスト・ホップを選択する
• 送信元アドレスと宛先アドレス
• 送信元ポートと宛先ポート(UDP/TCP/SCTP の場合)
• ICMP タイプと ICMP コード(ICMP の場合)
• フロー・ラベル値
• 変更されたバージョン
• Linux kernel 3.8
9
802.1ad(Q-in-Q)のサポート
• 概要
• VLAN タグを入れ子にできる IEEE 802.1ad の機能が実装された
!
!
!
!
!
!
!
!
!
!
• 変更されたバージョン
• Linux kernel 3.10
# ip link add link eth0 eth0.123 
type vlan proto 802.1ad id 123
# ip link add link eth0.123 eth0.123.234
type vlan proto 802.1q id 234
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff
3: eth0.123@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DO
link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff
4: eth0.123.234@eth0.123: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdis
link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff
10
VTI over IPv6 のサポート
• 概要
• IPv4 でしか利用できなかった VTI が IPv6 でも利用できるように
なった
• VTI のはなしは以下の URL を参照…
• http://www.slideshare.net/m-asama/vti-18507230
• 変更されたバージョン
• Linux kernel 3.13
11
{ip¦ip6¦arp¦eb}tables → nftables
• 概要
• 2009 年に初めてリリースされいままでメインラインに取り込まれ
ずメンテナンスされていた nftables が Linux kernel 3.13 でメイ
ンラインにマージされた(旧来の {ip¦ip6¦arp¦eb}tables もいまま
で通り利用可能だが混在は不可)
• プロトコル毎にコマンドが別れており且つカーネル内でもコードの
重複が多かった {ip¦ip6¦arp¦eb}tables を nftables というひとつ
のコマンドで制御できるようにし且つエンジンも共通化したらしい
• ペイロード内のデータをオフセットとサイズを指定して比較し
たり…といった低レベルの機能を実装した VM が用意されてい
て nfstables はその VM の命令セットにコンパイルして
NETLINK でカーネルに流し込む…みたいなことをしてるらしい
• 変更されたバージョン
• Linux kernel 3.13
12
参考文献
• Linux Kernel Newbies
• http://kernelnewbies.org/Linux_3.4
• …
• http://kernelnewbies.org/Linux_3.13

Hydrogen → Helium での Linux kernel の違い

  • 1.
    Hydrogen → Heliumでの Linux kernel の違い 浅間 正和 @ 有限会社 銀座堂
  • 2.
  • 3.
    はじめに • こんな内容 • netの中で起きた VyOS に影響がありそうな変更を紹介 • net の中でも TCP fast open 等 VyOS の機能にはそんなに影 響がなさそうなものは今回は除外 • 動機 • Helium で Linux kernel のバージョンが 3.13 にあがるらしい • ちなみに Hydrogen は 3.3 だった • net 周りでどんな違いがあるのか調べてみたい • 注意 • この発表はあくまで Linux kernel の違いであってここで紹介する 機能が VyOS でサポートされるという意味ではないです • でも CLI さえ作れば簡単に組み込むことはできると思います • 欲しい機能があったらこの後の @hiroysato さんの発表を参考に 自分で組み込んでみよう! 3
  • 4.
    L2TPv3 over IPv6のサポート • 概要 • Linux kernel 3.4 以前では L2TPv3 のトランスポートに IPv4 し か利用できなかったが IPv6 でもできるようになった • Unmanaged L2TPv3 として設定する場合は以下のように iproute2 コマンドを実行 ! ! ! ! ! ! • 変更されたバージョン • Linux kernel 3.5 # modprobe l2tp_ip6 # modprobe l2tp_eth # ip l2tp add tunnel remote 2001:db8:123::123 local 2001:db8:234::234 tunnel_id 123 peer_tunnel_id 123 encap ip # ip l2tp add session name l2tpeth0 tunnel_id 123 
 session_id 123 peer_session_id 123 4
  • 5.
    IPv4 ルーティング・キャッシュ機能廃止 • 概要 •IPv4 のルーティングではいちど探索したルーティング・テーブル のエントリーをキャッシュしておくことで同一フローのパケットの 探索処理を高速化する仕組みがあった • お行儀の良いパケットしか受け取らないのであれば問題はないが DoS 攻撃を受けると悲しいことになるということで削除された • 変更されたバージョン • Linux kernel 3.6 5
  • 6.
    IPv4 ルーティング・キャッシュ機能廃止 1flow 256flow65,536flow 16,777,216flow 2,147,483,648flow Internet Week 2010 S7 Vyatta ∼仮想世界をになうルーター∼ 『Vyatta 徹底評価!』の資料より引用 https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s7/iw2010-s7-03.pdf 6
  • 7.
    IPv4 ルーティング・キャッシュ機能廃止 Internet Week2010 S7 Vyatta ∼仮想世界をになうルーター∼ 『Vyatta 徹底評価!』の資料より引用 https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s7/iw2010-s7-03.pdf 7
  • 8.
    VXLAN 機能の追加 • 概要 •乱立する NVO3(Network Virtualization Over L3)技術のうち 現在 IETF で標準化が進められている VXLAN が実装された • iproute2 コマンドで以下のように実行することで利用できる ! ! ! • 上記のコマンドを実行すると vxlan0 という名前の仮想イーサネッ ト・インターフェースが作成される • eth0 上の 239.1.1.123 というマルチキャスト・グループに参加し ブロードキャストやマルチキャスト等のフレームはカプセル化後に このマルチキャスト・アドレス宛に送信される • 変更されたバージョン • Linux kernel 3.7 # ip link add vxlan0 type vxlan id 123 group 239.1.1.123 dev eth0 8
  • 9.
    IPv6 で ECMPのサポート • 概要 • IPv4 ですでにサポートされていた Equal Cost Multi-Path(ECMP :同一の宛先プレフィクスで異なるネクスト・ホップのルーティン グ・テーブル・エントリーを複数登録してトラヒックを分散させる ための技術)が IPv6 でもサポートされた • 以下の情報のハッシュ値からネクスト・ホップを選択する • 送信元アドレスと宛先アドレス • 送信元ポートと宛先ポート(UDP/TCP/SCTP の場合) • ICMP タイプと ICMP コード(ICMP の場合) • フロー・ラベル値 • 変更されたバージョン • Linux kernel 3.8 9
  • 10.
    802.1ad(Q-in-Q)のサポート • 概要 • VLANタグを入れ子にできる IEEE 802.1ad の機能が実装された ! ! ! ! ! ! ! ! ! ! • 変更されたバージョン • Linux kernel 3.10 # ip link add link eth0 eth0.123 type vlan proto 802.1ad id 123 # ip link add link eth0.123 eth0.123.234 type vlan proto 802.1q id 234 # ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff 3: eth0.123@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DO link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff 4: eth0.123.234@eth0.123: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdis link/ether 52:54:00:bf:b6:10 brd ff:ff:ff:ff:ff:ff 10
  • 11.
    VTI over IPv6のサポート • 概要 • IPv4 でしか利用できなかった VTI が IPv6 でも利用できるように なった • VTI のはなしは以下の URL を参照… • http://www.slideshare.net/m-asama/vti-18507230 • 変更されたバージョン • Linux kernel 3.13 11
  • 12.
    {ip¦ip6¦arp¦eb}tables → nftables •概要 • 2009 年に初めてリリースされいままでメインラインに取り込まれ ずメンテナンスされていた nftables が Linux kernel 3.13 でメイ ンラインにマージされた(旧来の {ip¦ip6¦arp¦eb}tables もいまま で通り利用可能だが混在は不可) • プロトコル毎にコマンドが別れており且つカーネル内でもコードの 重複が多かった {ip¦ip6¦arp¦eb}tables を nftables というひとつ のコマンドで制御できるようにし且つエンジンも共通化したらしい • ペイロード内のデータをオフセットとサイズを指定して比較し たり…といった低レベルの機能を実装した VM が用意されてい て nfstables はその VM の命令セットにコンパイルして NETLINK でカーネルに流し込む…みたいなことをしてるらしい • 変更されたバージョン • Linux kernel 3.13 12
  • 13.
    参考文献 • Linux KernelNewbies • http://kernelnewbies.org/Linux_3.4 • … • http://kernelnewbies.org/Linux_3.13