function Geek()

技術的な備忘録が多くなってる。

NICの冗長化しちゃおうぜ?

いま現在ネットワーク関連の業務を進めています。

 

冗長化構成へのリプレイスに向け、ansibleのplaybook検証などを進めておます。

最近ネットワークのお頭からポートトランキングの設定を纏めておいて

との事で依頼を受けました。

 

f:id:LoliCom:20150709194724j:plain

 

ポートトランキング...?

という事で、やってみました!

ポートトランキング!

 

 目次

1.ポートトランキングについて

2.ボンディングの設定(ココらへんから設定開始)

2-1.Bondingモジュールの設定ファイルの作成

2-2.NICの設定

2-3.マスターとなるNICの設定

2-4.ネットワークの再起動

2-5.bond0の確認方法

2-6.冗長化の確認

2-7.eth0をdownさせた状態

ポートトランキング

まずポートトランキングについてですが

ネットワーク機器において、複数の物理ポートを束ねて使用すること。ポートトランキングを使用することで、複数の物理ポートが論理的に1本として扱われ、 帯域幅を増やすと同時に、物理リンクの何本かに障害が発生しても残りのリンクによって通信することができる。VLANからも単一ポートとして認識される。

ポートトランキングとは- IT単語帳 - IT、IT製品の情報なら【キーマンズネット】

 

メーカーさんなどにより

ボンディングであったり、チーミングであったり、トランキングであったりと

名称は違うみたいですが意味合いなどは同じ感じですかね。

こちらのブログを参考にしました!

bibo-log.blog.so-net.ne.jp

今回の目的としては

サーバ側のNIC冗長化でしたので、ボンディングになりますね!

別のボンディングの用途としては、

スループットの増強にも使えるようです。

 

なんとなく理解は出来ましたが、イメージしにくいので画像がありました。

f:id:LoliCom:20150709114401j:plain

参考画像元

意外と知らない?NICを冗長化するボンディング(bonding) - うさぎ文学日記

 

これならイメージがしやすいかと!

サーバ側のeth0とeth1をlinuxのBondingモジュールにより

ひとつのNICとして認識させ、スイッチからの通信を冗長化してる感じですね!

 

ボンディングの設定を行う

実際に設定を行っていきます。

まずはBondingモジュールの設定から

■使用OS

CentOS6.6

Bondingモジュールの設定ファイルの作成

create bonding module file

 

ここで気を付けるのが 「mode=x」です。

設定値を適宜入れるのですが

Mode No. Mode Name description
0 balance-rr 耐障害性とロードバランシングのためラウンドロビンポリシーを設定します。利用可能な第 1 のインターフェースからそれぞれのボンディングされたスレーブインターフェースで送受信が順次行われます。
1 active-backup 耐障害性のためアクティブなバックアップポリシーを設定します。利用可能な第 1 のボンディングされたスレーブインターフェースにより送受信が行われます。別のボンディングされたスレーブインターフェースは、アクティブなボンディング されたスレーブインターフェースが失敗した場合にのみ使用されます。
2 balance-xor 耐障害性とロードバランシングのため XOR (排他的論理和) ポリシーを設定します。この方法を使用すると、インターフェースによって受信要求の MAC アドレスとスレーブ NIC の 1 つの MAC アドレスが一致します。このリンクが確立すると、利用可能な第 1 のインターフェースから送信が順次行われます。
3 broadcast 耐障害性のためブロードキャストポリシーを設定します。すべての送信は、すべてのスレーブインターフェースで行われます。
4 802.3ad  IEEE 802.3ad 動的リンクアグリゲーションのポリシーを設定します。同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。アクティブなアグ リゲーターのすべてのスレーブで送受信を行います。802.3ad に対応するスイッチが必要です。
5 balance-tlb 耐障害性とロードバランシングのため送信ロードバランシング (TLB) ポリシーを設定します。発信トラフィックは、各スレーブインターフェースの現在の負荷に従って分散されます。受信トラフィックは、現在のスレーブにより受 信されます。受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。
6 balance-alb 耐障害性とロードバランシングのためアクティブロードバランシング (ALB) ポリシーを設定します。IPV4 トラフィック用の送受信ロードバランシングが含まれます。ARP ネゴシエーションにより、受信ロードバランシングが可能です。

http://ja.community.dell.com/techcenter/b/weblog/archive/2014/05/16/linux-bonding-mode-0

自分の設定する意図に合わせて、設定値を決めてください。

今回は冗長化ですので、「mode=1」としました。

NICの設定

次はサーバのNICの設定をします。

「ifcfg-eth0」と「ifcfg-eth1」それぞれスレーブ化させる設定をします。

the ifcfg-eth0 and ifcfg-eth1 file is edit

マスターとなるNICの設定

「ifcfg-eth0」と「ifcfg-eth1」をスレーブ化させたので

お次はマスター的な設定ファイルを作成します。

create nic-bond file

ネットワークの再起動

設定ファイルの作成などが完了したので、再起動をかけます。

network restart command

bond0の確認方法

再起動後に設定を確認します。

bond0 check ifconfig

 設定は問題なさそうです。

 

冗長化の確認

では、冗長化出来ているかどうかを確認していきます。

 

確認方法は色々あります。

実際にLANを抜き差しして、pingを打って確認したり

eth0とeth1を交互にdownさせてみたり。

その作業の中で状態を確認するのが以下のコマンド

the NIC status check

 

eth0をdownさせた状態

the NIC eth0 status down

この状態でもpingが通ったので、冗長化は成功してますね!

逆にeth1をdownさせてもpingは通りました。

 

次はこれを複数台に設定するために

ansibleを使用してplaybookでやってみます。

社内の勉強会で趣味に走った(Arduino工作)

毎週ある社内勉強会のお当番だったので、なににしようか悩んでいた時に・・・
ふとこの腕時計を見て思いつきました!

f:id:LoliCom:20141205151134j:plain

ウェアラブルデバイスじゃね!?

と、いうことでslideshareにもアップしてみました!

結果的には面白かったです!
高校が工業系の学校だったので、学生時代を思い出しました!

ただ、社内での私のキャラ上あまり
喋るのもうまくはないので、盛り上がりに欠ける部分があったのは改善の必要あり。

次回はなにをしようかなー?

CentOSインストール後の初期設定てきな

OSインストール後に行う初期設定的なのを書いていきます。

※僕がやっているだけなので其々の環境に合ったパターンで作業してください

 

では、本日もよろしくお願いしますー!

 

続きを読む

名前ベースのバーチャルホストで複数のSSLを扱う(SNI使用)

1台のサーバで複数のドメインを使用する事になり、SSLで対応する事になりました。

調べ始めると、ポートを別々にしないと無理!

などが書いてあり、これはめんどくさいな~

とか思っていたのですが!!

深く調べるとどうやらSNIという便利拡張機能があるらしいのでそちらで対応してみます!

 

SNI:Server Name Indication

この拡張機能により名前ベースのバーチャルホストでもSSLが使用可能になりました。

ちなみにバージョンにより使用できないので、注意を!

Apache 2.2.12以降
OpenSSL 0.9.8j以降

※ブラウザでも対応してないバージョンがあるのでご注意を!

 

では、実際に設定します!

vi /etc/httpd/conf.d/ssl.conf

#追加
NameVirtualHost:443

#offに設定
SSLStrictSNIVHostCheck off
<VirtualHost *:443>
ServerName lamp-sv
DocumentRoot "/var/www/lamp-sv"
<Directory "/var/www/lamp-sv">
Options MultiViews
AllowOverride None
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLInsecureRenegotiation on
#「lamp-sv」用のサーバ秘密鍵と証明書
SSLCertificateFile /etc/pki/tls/certs/lamp-sv.crt
SSLCertificateKeyFile /etc/pki/tls/certs/lamp-sv.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/lamp-sv_error_log
CustomLog logs/lamp-sv_access_log combined env=!nolog
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
<VirtualHost *:443>
ServerName virtual-sv
DocumentRoot "/var/www/virtual-sv"
<Directory "/var/www/virtual-sv">
Options MultiViews
AllowOverride None
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLInsecureRenegotiation on
 
#「virtual-sv」用のサーバ秘密鍵と証明書
SSLCertificateFile /etc/pki/tls/certs/virtual-sv.crt
SSLCertificateKeyFile /etc/pki/tls/certs/virtual-sv.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/virtual-sv_error_log
CustomLog logs/virtual-sv_access_log combined env=!nolog
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

 

 といった感じに設定すればOKです!

僕の場合は3ドメインあったので3つ設定しました。

SNIに未対応のブラウザ用に「SSLStrictSNIVHostCheck」デレクティブを off にしておきます。

SNIの仕組み

SNIではSSL/TLSのやりとりの中で、暗号化していないホスト名をサーバに伝えてくれるので、指定したバーチャルホストを表示することができます。

 

設定が楽になったので技術の進歩はすごいですね!

ありがとうございました!