Comments
Description
Transcript
uxNetworkingRocksLinuxNetworkingRocks
s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or Contents s k c o R g 1 はじめに 1.1 本著のターゲット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 本サイトで扱う Linux ネットワークツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 本サイトで扱うネタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 本プロジェクトへの参加方法 2.1 編集ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 連絡先 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 inu tw e xN n i k or 3 学習教材・資格など 3.1 Linux Professional Institute の提供する教育・資格 . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Linux Foundation の提供する教育・資格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Red Hat の提供する教育・資格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 4 インターネットアーキテクチャー 7 c o R g kin L s k 5 基本的なネットワーキング 5.1 Linux のネットワーク設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Linux はどのようにネットワーク設定を行っているか? . . . . . . . . . . . . . . . . . . . . . . 9 9 9 Linux を使ったルーターの作成 6.1 Linux を使ったルーターの基本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 カーネルパラメータの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 ルーティングの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 12 quagga による動的ルーティング 7.1 quagga のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 8 負荷分散の基本 8.1 L2,L3 と L4,L7 の違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 6 L o R g r o etw N x inu 7 9 セキュリティについて o R g s ck N x u n i L 17 10 パケットステアリング 10.1 パケットステアリング とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 xfrm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 19 11 パフォーマンスについて 21 u n i L tw e xN n i k or i s k c n i k or o R g 11.1 パフォーマンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Indices and tables o R ng s k c x u Lin tw e N 21 23 s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s ii u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 1 はじめに s 近年、Linux を利用したネットワークに注目が集まっている。 k c o R g 1 OpenStack の仮想ネットワークを構築するための Open vSwitch の活用例や、Network OS(Cumulus Linux , Open Compute Project の Open Network Linux 2 等) のネットワーク機器向けの OS にも Linux の成果が活用されてい る。これらは、全て Linux のネットワーク機能の進化と活用に依るものだ。 n i k or だが、エンジニアの実態としては、サーバーエンジニアやネットワークエンジニアと言った細かい区分でスキ ルアセットが別れてしまっている。その結果、従来のサーバーのネットワークだけであっても、マルチ NIC(複 数 NIC)の設定だけでも手間取るエンジニアが多いのも事実である。(それらをエンジニアと呼称していいか は別として) tw e xN なぜこのような現状になってしまっているかというと、幾つかの理由が考えられる。 u n i L • ネットワークがネットワークベンダーが主導になり、エコシステムを形成 s k c • Linux のネットワーク設定に関する市場が大きくなかった為、研修テキストや書籍などでも優先度が下げ られている。 o R g n ki 上記の理由のうち、後者については市場が形成され始めた。しかしながら、研修や書籍と言った 半分は教育やテキストによるものではないかと考える。様々な書籍や研修テキストを利用して、新人の教育に 携わってきたが、残念ながらネットワークに関する記述は弱い。 r o etw その為、新人のネットワークスキルの習熟のロードマップを描くのには苦労している。 本サイトでは、こういった状況を省みて、標準的なネットワークとしての体系的な書籍を目指す。ゆくゆくは、 Linux を使ったネットワークが標準的なものになり、Cisco の CCNA,CCIE と言った資格に変わるものになって いくだろう。 L N x inu1.1 本著のターゲット 基本的な Linux の操作は、習熟していること。 s 1.2 本サイトで扱う Linux ネットワークツール ck o gR N x u n i L Linux ネットワーク用のツールと言っても、Linux 標準のネットワーク設定ツールは、以下の2つがある。 • iproute2 1 2 tw e xN Cumulus Linux https://www.cumulusnetworks.com/ https://opennetlinux.org/ u n i L n i k or 1 LinuxNetworkingRocks Documentation, Release 1.0 • NetworkManager n i k or s k c o R g しかしながら、OpenStack などを利用しようとすると、NetworkManager を無効化する様に促される。実際に筆 者のこれまでの経験からも NetworkManager は、利用しないケースが多いため、iproute2 パッケージから提供 される ip コマンドをベースにして解説を行う。 x u Lin tw e N 1.3 本サイトで扱うネタ 本サイトでは o R ng s k c • Linux の基本的なネットワーク • Linux を使ったルーターの作成 s – VyOS を使った比較 • Linux を使った LB の作成 • Linux を使った Firewall の作成 • Linux を使った VPN の作成 • Openstack のネットワーキングの解説 • Openstack を使ったオペレーション – ルーター – LBaaS – VPNaaS s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s 2 u n i L tw e xN n i k or ck o gR N x u n i L Chapter 1. はじめに s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 2 本プロジェクトへの参加方法 s 本プロジェクトは、bitbucket にてホスティングされています。 https://bitbucket.org/techbook/linux-networking 編集の参加希望者は、bitbucket に参加の上、プロジェクトへ参加申請をお願いします。 2.1 編集ツール 編集ツールには、以下のものが必要です。 • git • sphinx s k c • texlive(pdf を作成する場合のみ) o R g n ki それぞれの使い方は特には説明いたしません。 2.2 連絡先 r o etw 準備中 L u n i L tw e xN n i k or k c o R g N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 3 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 3 学習教材・資格など • NPO 法人系、非営利コンソーシアム – Linux Professional Institute(LPI) Japan * 教育 * 資格 – Linux Foundation * 教育 * 資格 s k c • ベンダー系 o R g n ki – Red Hat * 教育 * 資格 u n i L tw e xN n i k or s k c o R g Linux の資格としては、有名なものとして LPIC が上げられます。が、それ以外にもベンダー系や、海外の NPO 法人、ベンダーなど様々な団体が資格試験を提供しています。 r o etw 筆者も全部受けたわけではないけども、LPI の Linux 標準教科書だけは読んだ。マルチ NIC は扱ってないし、 ネットワークは弱いところな気がする。 N x inu 3.1 Linux Professional Institute の提供する教育・資格 L LPI-Japan(Linux Professional Institute Japan)は、日本での Linux の技術力認定試験の普及と IT プロフェッショ ナルの育成のため 2000 年 7 月に設立され、現在は対象を広げ OSS のデータベースソフトウェア、クラウドソ フトウェアである CloudStack や OpenStack、更には HTML5 のプロフェッショナルの認定試験を実施する NPO 法人です。 http://www.lpi.or.jp/ s 3.1.1 教育 n i k or ck o gR N x u n i L Linux 標準教科書(PDF 版ダウンロード無料)や、LPIC 対策試験向け書籍など様々な書籍が出ています。 u n i L tw e xN 5 LinuxNetworkingRocks Documentation, Release 1.0 3.1.2 資格 LPIC tw e N n i k or s k c o R g 3.2 Linux Foundation の提供する教育・資格 x u Lin 3.2.1 教育 s k c https://www.edx.org/course?search_query=Linux o R ng 3.2.2 資格 s https://training.linuxfoundation.org/certification 3.3 Red Hat の提供する教育・資格 n i k or k c o R g Red Hat 認定エンジニア (RHCE) として、様々なプロダクトやソリューションについての教育や資格を提供し ています。 3.3.1 教育 https://www.redhat.com/ja/services/training s k c u n i L tw e xN o R g n ki 3.3.2 資格 https://www.redhat.com/ja/services/certification r o etw L N x inu s 6 u n i L tw e xN n i k or ck o gR N x u n i L Chapter 3. 学習教材・資格など s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 4 インターネットアーキテクチャー s インターネットのアーキテクチャーについては、よそのサイトが多く説明している。 s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 7 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 5 基本的なネットワーキング s 5.1 Linux のネットワーク設定 基本的にどの Web サイトでも、以下のような項目について説明しているはずです。 • DHCP • スタティックネットワーク – IP アドレスとネットマスク – デフォルトゲートウェイ – DNS u n i L tw e xN n i k or k c o R g しかし、どのようなプロセスの中で設定されているのか?と言った事については記載されてるものが少ないよ うに見えます。ここでは、どのように設定されているか、に遡って説明します。 s k c o R g 5.2 Linux はどのようにネットワーク設定を行っているか? n i k r o w t e N x 5.2.1 起動プロセス inu 起動プロセスの中から理解する事で様々な事を学ぶことが出来ます。 Linux は起動プロセスの中で、ネットワーク設定を行っている。そこで、ここでは、起動プロセスの仕組みと、 起動プロセスの中で何を行っているかを説明します。 L N x u n i L Linux と言っても、Ubuntu(debian) 系か Red Hat 系かによって、使われている仕組みが異なります。最新のバー ジョンでは、SystemD に統一され始めたが、Red Hat 系の 6.x バージョンでは、SysVinit であったり、Ubuntu の 14.04 以前は Upstart だった。 ここに詳しく書いてある。(そのうちドキュメント化しよう s http://www.slideshare.net/ttkzw/init SysVinit n i k or /etc/rc.d/init.d 配下に配置されたスクリプトをランレベルに従って起動していく。 tw e xN Note: init スクリプトの作り方 u n i L ck o gR 9 LinuxNetworkingRocks Documentation, Release 1.0 n i k or s k c o R g init スクリプトは、普通のシェルスクリプトの為、適当にコピーしても動くが適当さ故に、自作コマンドが多 数用意され、運用しづらいものになったりすることが多い。 Red Hat 系の OS では、rpmdevtools パッケージに含まれている、rpmdev-newinit コマンドを利用すれば init ス クリプトの雛形が作成可能です。 tw e N システムの基本的な init スクリプトは、initscripts パッケージに入っています。それらを参考にするのも良いで しょう s k c x u Lin systemd o R ng systemd s 5.2.2 起動プロセスの中で行われていること。 s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s 10 u n i L tw e xN n i k or ck o gR N x u n i L Chapter 5. 基本的なネットワーキング s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 6 Linux を使ったルーターの作成 s 6.1 Linux を使ったルーターの基本 Linux を使ったルーターを作るためには、以下のようなステップが必要になる。 1. カーネルパラメータの有効化 2. ルーティング設定 tw e xN n i k or k c o R g ルーティングの設定は、基本的なネットワーク設定と同等だが、市販されている L3 スイッチは、これまで解 説したルーティング設定で行った設定以上の内容が設定可能だ。 以下のような設定だ。 • 基本的なルーティング s k c u n i L • ポリシーベースルーティング(Linux ではアドバンスドルーティングと呼ぶ) o R g n ki • 動的ルーティング ここで先に説明しておくが、上記のルーティング設定のうち動的ルーティングは Linux 標準では対応していな い。動的ルーティングに対応するためには、quagga(旧: GNU zebra ) と言った対応するために必要なソフトウェ アが必要だ。もしくは、商用のソフトウェア (ZebOS 等) を利用する必要がある。 r o etw quagga は、 Cumulus Linux でも利用されている実績のあるソフトウェアなため、安心して欲しい。しかし、最 新の商用のソフトウェアでは利用可能な機能が、quagga では利用できないことが多い。 N x inu6.2 カーネルパラメータの設定 ZebOS は、NetScaler 等の商用プロダクトの中で利用されている。(らしい) L N x u n i L Linux をルーターとして動作させるためには、/etc/sysctl.conf に 以下のカーネルパラメータの設定が必要になる。 net.ipv4.ip_forward = 1 s 有効化するためには、以下のコマンドが必要だ。 sysctl -p ck o gR 現在設定されている内容を確認するためには、procfs を参照しよう。procfs は、通常は /proc にマウントされて いる。その中で、sys ディレクトリにカーネルパラメーターはマウントされている。(その配下は、. を / に変 換する。) cat /proc/sys/net/ipv4/ip_forward u n i L tw e xN n i k or 11 s k c LinuxNetworkingRocks Documentation, Release 1.0 n i k or o R g カ ー ネ ル の パ ラ メ ー タ の 説 明 は 、kernel-doc http://eno0514.hatenadiary.jp/entry/20150622/1434905054 パッケ ー ジ の 中 に 含 ま れ て い る 。 kernel-doc パッケージを導入すると以下の様なディレクトリが作成される。/usr/share/doc/kernel-doc-3.10.0/ tw e N 3.10.0 部は、カーネルのバージョンによって異なる為注意すること。 特に Linux をルーターとして使うためのカーネルパラメータ周りは以下のドキュメントに記載されている。 Documentation/networking/ip-sysctl.txt o R ng s k c x u Lin ip_forward - BOOLEAN 0 - disabled (default) not 0 - enabled s Forward Packets between interfaces. This variable is special, its change resets all configuration parameters to their default state (RFC1122 for hosts, RFC1812 for routers) 6.3 ルーティングの設定 6.3.1 静的ルーティング u n i L tw e xN n i k or k c o R g 特にはここでは説明しない。基本的な Linux ネットワーキングで説明した内容があれば十分だからだ。 s k c o R g n ki 6.3.2 アドバンスドルーティング マルチルーティングテーブル r o etw ルーティングテーブルは、rib(routing information base) とも言う。普段は、local と main の2つのルーティング テーブルを暗黙的に使っている。 それぞれ、以下のような内容が記載されている。 N x inu • local 自分の持っている IP への通信が記載 L • main デフォルトゲートウェイと、自分の持っている IP セグメントのルールが記載。静的ルーティングで 設定した内容もここに記載されている。 6.3.3 動的ルーティング s 動的ルーティングについては、複雑な為、別章を設ける。 quagga による動的ルーティング http://www.hongo.wide.ad.jp/exp/2010w/quagga.html 12 u n i L tw e xN n i k or ck o gR N x u n i L Chapter 6. Linux を使ったルーターの作成 s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 7 quagga による動的ルーティング s 7.1 quagga のインストール centos であれば、標準でレポジトリに含まれている。 その為、yum でそのままインストールが可能だ。 s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 13 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 8 負荷分散の基本 s 負荷分散と言っても、L2,L3,L4,L7 レイヤの負荷分散が存在する。 k c o R g 用途によって使い方は様々ですが、あまりその違いについては語られていません。ここでは、各レイヤ毎の負 荷分散について、その目的と設定方法について説明します。 8.1 L2,L3 と L4,L7 の違い tw e xN n i k or L2,L3 と L4,L7 の一番大きな違いは、セッションの概念の有無である。セッションの概念があると、以前のパ ケットをサーバー宛にパケットを割り振る事が可能です。 8.1.1 L2 Bonding L2 Bonding とは s k c u n i L o R g n ki r o etw L N x inu8.1.2 L3 ECMP, VRRP L2 Bonding とは s u n i L tw e xN n i k or ck o gR N x u n i L 15 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 9 セキュリティについて s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 17 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 10 パケットステアリング s 10.1 パケットステアリング とは k c o R g パケットステアリングとは、文字通りパケットをステアリング(操舵)する技術の事を指す。ロードバランス の中でも、パケットを振り分けると言った操作を行ったが、ここでは、もっと • iptables • xfrm 10.2 iptables s k c u n i L tw e xN n i k or iptables は、パケットのフィルターソフトウェアとして有名だが、パケットのフィルターだけについて記載して も、長くなってしまう。その為、セキュリティとして別章にて記載します。 o R g n ki セキュリティについて 10.3 xfrm r o etw https://www.nic.ad.jp/ja/materials/iw/2006/proceedings/T28-1.pdf L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 19 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 11 パフォーマンスについて s 11.1 パフォーマンス k c o R g パフォーマンスもここに記載するのには長すぎる事になるだろう。レイヤー毎に執筆したとしても、4つ。メ モリや CPU と言ったパラメーター数がそれにかかってくる。 n i k or おそらくこの章は FIX しないだろう。しかしながら、後を追う人が二の足を踏まなくても良いように、ここに 足取りを記す。 s k c u n i L tw e xN o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 21 s k c o R ng s k c x u Lin tw e N n i k or o R g s s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L s k c o R ng s k c x u Lin tw e N n i k or o R g CHAPTER 12 Indices and tables s • genindex s k c u n i L tw e xN n i k or k c o R g o R g n ki r o etw L N x inu s u n i L tw e xN n i k or ck o gR N x u n i L 23