2017年3月20日月曜日

USB3.0の1Gb 物理NICを買って仮想マシンに接続してみた

USB3.0になってから、データ転送速度が4Gbps=500MB/sになったということで、1GbpsのNICよりも転送速度が速くなっている(USB2.0は480Mbps=60MB/s)。今は安価でUSB3.0の1Gbpsの物理NICが売られているので、1つ買って検証用マシンのNICを増設することにした。

できることなら、ESXi自体のNICとして利用したかったのだが、案外手間がかかりそうだったので、仮想マシンのNICとして使うことにした。

購入したUSB3.0のNIC

今回購入したNICは以下となる。有名なメーカーでは無いが、安価だったことが購入の決め手となった。Amazonのレビューでも記載されているが、中身のチップセットはRealtek RTL8153となる。

このNICをESXiとして利用している物理マシンのUSB3.0ポートに接続し、ESXi自体で認識状況を確認してみる。1行目に「8153 Realtek」の文字が確認でき、ESXiとしても認識はしているようだ。

[root@esx01:~] lsusb
------------------------------
Bus 004 Device 002: ID 0bda:8153 Realtek Semiconductor Corp. 
Bus 003 Device 003: ID 05e3:0723 Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader
Bus 003 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
------------------------------

仮想マシンへの接続

続けて、NICを仮想マシンに接続する。vSphere Clientにて、接続したい仮想マシンを選んで、「設定の編集」を開く。

USBデバイスを使用する前に、まずはUSBコントローラを追加する必要がある。「追加」ボタンを押し、「USBコントローラ」を選択する(この時点では「USBデバイス」はグレーアウトしており追加不可)。コントローラタイプとして、"EHCI+UHCI"と"xHCI"の2種類が選択可能だが、USB3.0の場合は、"xHCI"を選ぶ。



一旦、「OK」を押して設定の編集画面を閉じたのち、再度「設定の編集」を開く。「USBデバイス」を選択すると、"Realtek USB 10/100/1000 LAN"が選択できるはずなので選択する。



これで仮想マシンにNICが追加された。Windowsの場合は標準のドライバで認識しているはず。Windows Server 2016の場合は、"usb_xhci"という名前でNICが表示された。



Windowsのドライバーの更新

Windows標準のドライバーで認識はするものの、最新ドライバーとなっていない。例えばWindows Server 2016では、OS標準ドライバーのバージョンは10.5となるが、本記事を記載した時点の最新ドライバーは10.13になる。そこで、最新のドライバーファイルを入手し更新することにする。

以下は、OS標準ドライバーの状態。2015年9月のドライバーとなっている。



ドライバーの最新バージョンの確認とダウンロードは、以下URLから実施できる。

Realtek - Software: Drivers & Utilities RTL8153
http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=56&Level=5&Conn=4&DownTypeID=3&GetDown=false

ダウンロードしたドライバーのフォルダの中にsetup.exeが同梱されているが、今回はデバイスマネージャーから更新を行うことにする。

デバイスマネージャーを開き、「Realtek USB GbE Family Controller」のプロパティを開き、「ドライバーの更新」を選択する。



ドライバーファイルのパスを聞かれるので、

   <ドライバーの解凍パス>\WIN10\64\rtux64w10.INF

を選択する。

  
後は自動でドライバーが更新され、バージョンが最新となっていればOK。


このNICを使ってQNAPのNASにファイル転送を実施してみると、100MB/s以上の転送速度が出るので、1Gbpsの帯域近くまで使えており、1000円程度のNICでも問題なく速度が出ることがわかった。最近は無線LANのみで物理NICを持たないノートPCが多いので、サーバーメンテナンス等で物理NICが欲しい場合に備えて、1個持っておくのはよいかもしれない。

2017年3月3日金曜日

CentOS 7にunboundをインストールしてDNSキャッシュサーバーにしてみた

DNSといえば昔からBINDが有名だが、BINDは機能が高度化して複雑になっており、それゆえ脆弱性の問題が多く発見される傾向にある。

以下サイトでまとめられているが、1か月に1回は脆弱性情報が公開される印象がある。

・JPRS DNS関連技術情報
https://jprs.jp/tech/

というわけで、単純なDNSキャッシュサーバーであれば、そろそろBINDを使わなくてもよいのではないか?ということで、unboundというOSSを使ってみることにした。

unbound導入手順

今回はCentOS 7.3にunboundを導入する。

1. yumでunboundをインストール

yumを使ってインストールする。

# yum install unbound
------------------------------
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.nus.edu.sg
 * extras: centos.usonyx.net
 * updates: mirror.vastspace.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ unbound.x86_64 0:1.4.20-28.el7 を インストール
--> 依存性の処理をしています: unbound-libs(x86-64) = 1.4.20-28.el7 のパッケージ: unbound-1.4.20-28.el7.x86_64
--> 依存性の処理をしています: ldns >= 1.6.16-10 のパッケージ: unbound-1.4.20-28.el7.x86_64
--> 依存性の処理をしています: libunbound.so.2()(64bit) のパッケージ: unbound-1.4.20-28.el7.x86_64
--> 依存性の処理をしています: libldns.so.1()(64bit) のパッケージ: unbound-1.4.20-28.el7.x86_64
--> 依存性の処理をしています: libevent-2.0.so.5()(64bit) のパッケージ: unbound-1.4.20-28.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ ldns.x86_64 0:1.6.16-10.el7 を インストール
---> パッケージ libevent.x86_64 0:2.0.21-4.el7 を インストール
---> パッケージ unbound-libs.x86_64 0:1.4.20-28.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package              アーキテクチャー
                                     バージョン              リポジトリー  容量
================================================================================
インストール中:
 unbound              x86_64         1.4.20-28.el7           base         473 k
依存性関連でのインストールをします:
 ldns                 x86_64         1.6.16-10.el7           base         476 k
 libevent             x86_64         2.0.21-4.el7            base         214 k
 unbound-libs         x86_64         1.4.20-28.el7           base         296 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+3 個の依存関係のパッケージ)

総ダウンロード容量: 1.4 M
インストール容量: 4.4 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): ldns-1.6.16-10.el7.x86_64.rpm                       | 476 kB   00:00  
(2/4): unbound-1.4.20-28.el7.x86_64.rpm                    | 473 kB   00:00  
(3/4): unbound-libs-1.4.20-28.el7.x86_64.rpm               | 296 kB   00:00  
(4/4): libevent-2.0.21-4.el7.x86_64.rpm                    | 214 kB   00:00  
--------------------------------------------------------------------------------
合計                                               1.4 MB/s | 1.4 MB  00:00  
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction

~(中略)~

インストール:
  unbound.x86_64 0:1.4.20-28.el7                                              

依存性関連をインストールしました:
  ldns.x86_64 0:1.6.16-10.el7               libevent.x86_64 0:2.0.21-4.el7    
  unbound-libs.x86_64 0:1.4.20-28.el7    

完了しました!
------------------------------

yumが使えない場合は、rpmからインストールする必要があるが、依存するパッケージとインストール順序は以下の通りとなる。

------------------------------
 1 -> libevent-2.0.21-4.el7.x86_64.rpm
 2 -> ldns-1.6.16-10.el7.x86_64.rpm
 3 -> unbound-libs-1.4.20-28.el7.x86_64.rpm
 4 -> unbound-1.4.20-28.el7.x86_64.rpm
------------------------------

2. unbound設定

/etc/unbound/unbound.confを編集し、必要な設定を行う。デフォルトではすべてがコメントアウトされているので、必要な部分をコメントインしたり、追記したりすればよい。

以下に修正箇所を記載する。

------------------------------
server:
       interface: 0.0.0.0     ←すべてのアドレスからの問い合わせに回答(IPv4)
       interface: ::0       ←すべてのアドレスからの問い合わせに回答(IPv6)

       access-control: 0.0.0.0/0 refuse   ←デフォルト拒否(IPv4)
       access-control: 127.0.0.0/8 allow  ←ループバックアドレスを許可(IPv4)
       access-control: 192.168.1.0/24 allow ←問い合わせを許可するネットワーク
       access-control: ::0/0 refuse     ←デフォルト拒否(IPv6)
       access-control: ::1 allow       ←ループバックアドレスを許可(IPv6)
       access-control: ::ffff:127.0.0.1 allow ←ループバックアドレスを許可(IPv6)

 forward-zone:           ←コメントインする
       name: "."            ←すべてのドメインに対してフォワード
       forward-addr: 129.250.35.250 ←フォワード先DNS(今回はNTT America Technical Operations)
       forward-addr: 8.8.8.8      ←フォワード先DNS(今回はGoogle Public DNS)
------------------------------

3. 設定ファイルのチェック

unboundには設定ファイルをチェックするコマンドが用意されている。これはサービス起動時に自動で実行されるが、手動でも実行可能。

# unbound-checkconf
------------------------------
unbound-checkconf: no errors in /etc/unbound/unbound.conf
------------------------------

4. 設定ファイル再読み込みのため、unboundを再起動

最後に設定反映のためunboundを再起動する。

# systemctl restart unbound
# systemctl status unbound
------------------------------
unbound.service - Unbound recursive Domain Name Server
   Loaded: loaded (/usr/lib/systemd/system/unbound.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2017-02-25 12:03:22 JST; 2s ago
  Process: 28392 ExecStartPre=/usr/sbin/unbound-anchor -a /var/lib/unbound/root.key -c /etc/unbound/icannbundle.pem (code=exited, status=0/SUCCESS)
  Process: 28391 ExecStartPre=/usr/sbin/unbound-checkconf (code=exited, status=0/SUCCESS)
 Main PID: 28395 (unbound)
   CGroup: /system.slice/unbound.service
           mq28395 /usr/sbin/unbound -d

~(以下略)~
------------------------------

5. DNS名前解決先を自分自身にする

必須ではないが、最後にOS自身の名前解決も自分自身に変えておく。

# vi /etc/resolv.conf
------------------------------
nameserver 127.0.0.1
------------------------------

以上でインストール作業は終了。私の環境ではインストールから半月ほど経過しているが、特に問題なく動作している。