2009年5月27日水曜日

Ubuntu でシリアルポートからログインする

Linux でネットワーク経由で接続できない場合のために、シリアルポートからログインできるようにしておくと便利である。

そうすれば、邪魔なディスプレイもキーボード、マウスも片付けられる。



Ubuntu でシリアルポートからログインする設定



  1. /etc/event.d/ttyS0 を作成する
    $ sudo cp -p /etc/event.d/tty1 /etc/event.d/ttyS0
    $ sudo vi /etc/event.d/ttyS0
    ---- ---- ---- ----
    start on stopped rc2
    start on stopped rc3
    start on stopped rc4
    start on stopped rc5
    stop on runlevel 0
    stop on runlevel 1
    stop on runlevel 6
    respawn
    exec /sbin/getty -L 9600 ttyS0 vt100
    ---- ---- ---- ----



Ubuntu でシリアルポートからログインする設定 (9.10 以降)



  1. /etc/init/ttyS0.conf を作成する
    $ sudo cp -p /etc/init/tty1.conf /etc/init/ttyS0.conf
    $ sudo vi /etc/init/ttyS0.conf
    ---- ---- ---- ----
    start on stopped rc RUNLEVEL=[2345]
    stop on runlevel [!2345]

    respawn
    exec /sbin/getty -L 9600 ttyS0 vt100
    ---- ---- ---- ----



CentOS 5 でシリアルポートからログインする設定



  1. /etc/inittab に次の行を追加する
    S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100

  2. /etc/securetty に次の行を追加する (root ログインに必要)
    ttyS0


CentOS 6 でシリアルポートからログインする設定






Debian (Lenny) でシリアルポートからログインする設定





  1. /etc/inittab の次の行のコメントを外す
    T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100





KVM でシリアルデバイスを追加する




また、KVM で virtsh 経由でコンソール接続するには、xml ファイルを編集してシリアルデバイスを追加する必要がある。



  1. 仮想マシンの xml ファイルを編集する。(仮想マシン: UbuntuJeOS11 の例)
    $ virsh
    virsh # edit UbuntuJeOS11
    :
    <devices>
    :
    <serial type='pty'>
    <source path='/dev/pts/0'>
    <target port='0'/>
    </serial>
    :
    </devices>

  2. 仮想マシンを起動する。
    virsh # start UbuntuJeOS11
    virsh # quit

  3. コンソールで仮想マシンに接続する。(root 権限が必要。コンソールから抜けるには、ctrl + ])
    sudo virsh console UbuntuJeOS11



参考

mod_proxy_ajp で Apache と Tomcat の間の通信が切断されてしまう

Apache と Tomcat との連携で mod_proxy_ajp というモジュールを使う。
間に Firewall が入っていて、無通信状態が続くと、コネクションを張りっぱなしの TCP セッションが切れてしまう。

対応策としては、下記のような方法が考えられると思う。

(1) TCP Keepalive を使う

[httpd.conf]
ProxyPass ajp://172.16.210.12:8009/jsp-examples/ keepalive=On
↑ TCP keepalive を有効にする。

[レジストリ]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
↑ TCP keepalive の間隔をミリ秒で指定する。(Windows Server 2003 の規定値は、2時間)

(2) CPING/CPONG を使う

2009年5月26日火曜日

仮想マシンのディスクイメージの複製

仮想マシンのディスク イメージを複製して使用したいことがよくある。
その場合の注意点がある。


仮想マシンの複製 (KVM の場合)
  1. 複製元になる仮想マシンを停止する。
  2. 仮想マシンのディスクイメージをコピーする。
    $ sudo virt-clone -o OriginalGuest -n NewGuest -f /path/to/NewGuest.img


Windows Server 2003 の場合

Windows の場合、SID などの再生性のために sysprep を実行する必要がある。
  1. 新しい仮想マシンを起動し、Administrator でログオンする。
  2. C:\sysprep フォルダを作成する。(このフォルダは再起動後に自動的に削除される)
    > mkdir C:\sysprep
  3. 仮想マシンの CD-ROM ドライブに OS のインストール CD-ROM をセットする。
    KVM なら 以下の例のようにする。
    $ virsh attach-disk --type cdrom NewGuest /path/to/2003_disk1.iso hdc
  4. D:\SUPPORT\TOOLS\DEPLOY.CAB に含まれるファイルを C:\sysprep フォルダにコピーする。(D: をCD-ROM ドライブとする。)
    > expand -f:* D:\SUPPORT\TOOLS\DEPLOY.CAB C:\sysprep
  5. C:\sysprep\sysprep.exe を実行する。
  6. [再シール] ボタンをクリックする。
  7. 自動的にシャットダウンする。
  8. 起動すると「Windows セットアップ ウィザード」が開始します。
後は、ホスト名とネットワーク設定を通常通り行えば良い。


Windows Server 2008 R2 の場合

Windows の場合、SID などの再生性のために sysprep を実行する必要がある。
  1. 新しい仮想マシンを起動し、Administrator でログオンする。
  2. ファイル名を指定して実行から、[%SystemRoot%\System32\sysprep\sysprep.exe /generalize /oobe /reboot] を実行する。
  3. 再起動すると、「Windows セットアップ ウィザード」が開始します。
後は、ホスト名とネットワーク設定を通常通り行えば良い。


Ubuntu の場合

新しい仮想マシンを作成し、MAC アドレスが変わると、新しいインタフェース名で認識してしまう。
/etc/udev/rules.d/70-persistent-net.rules を削除し、再起動すればよい。/etc/udev/rules.d/70-persistent-net.rules は、再起動後に再生成される。

後は、ホスト名とネットワーク設定を通常通り行えば良い。

CentOS の場合

新しい仮想マシンを作成し、MAC アドレスが変わると、ネットワーク設定が初期化されてしまう。

  1. eth0 の記述があるファイルを調べる。
    find /etc -type f | xargs grep eth0
  2. MAC アドレスを調べる。
    # ifconfig | grep HWaddr
  3. /etc/sysconfig/network-scripts/ifcfg-eth? ifcfg-eth?.bak にバックアップされ、ifcfg-eth? は初期化されてしまう。バックアップファイルから元に戻し、HWADDR= の行の MAC アドレスを実際のアドレスに修正する。
  4. /etc/sysconfig/hwconf にも network.hwaddr: の行に MAC アドレスの記述があるが自動的に更新される。
後は、ホスト名とネットワーク設定を通常通り行い、再起動すればよい。

(例) ホスト名を変更する場合
  1. ホスト名の記述があるファイルを調べる。
    # find /etc -type f | xargs grep `hostname -s`
  2. /etc/sysconfig/network の HOSTNAME= の行を修正
  3. /etc/hosts を修正
  4. reboot

2009年5月23日土曜日

GNS3 (Dynamips) で SDM を使ってみる


CCNP で SDM (Cisco Router and Security Device Manager) が出題されるので、実際触ってみたいという方も多いでしょう。今回は GNS3 で SDM を使ってみた。

環境
  • ホスト OS: Ubuntu 9.04 (amd64)
  • GNS3: 0.6.1
  • Dynamips: 0.2.8-RC2-amd64
  • KVM (仮想マシン) ゲスト OS: Windows XP Professional SP3
  • JRE: 1.6.0_03 (http://java.sun.com/products/archive/ から、ダウンロードする。)
  • SDM: SDM 2.5 (English)

手順
  1. Cisco (http://www.cisco.com/pcgi-bin/tablebuild.pl/sdm) から、SDM のインストーラとリリースノートをダウンロードする。
  2. リリースノートを読んで、使用条件を満たしているか確認する。
  3. gns3 を起動して、仮想ルータと雲 (Cloud) を配置、接続する。
    雲 (Cloud) で「NIO イーサネット」を使用するには、root 権限が必要となる。
    (gksudo -g gns3 & として起動)
  4. 仮想ルータのインタフェースに IP アドレスを割り当て、PC (私の場合、仮想マシン) から PING できることを確認する。
  5. PC に JRE をインストールする。リリースノートを読んで対応するバージョンをインストールすること。JRE 1.6.0_13 では動作しませんでした。複数のバージョンの JRE がインストールされている場合は、コントロールパネル > Java から、Java コントロールパネルを起動。Java タブの Java アプレットのランタイム設定でバージョンを選択できる。
  6. Cisco からダウンロードした SDM (SDM-V25.zip) を展開、展開したフォルダ内の Help.htm に従ってルータを設定する。
  7. 展開したフォルダ内の setup.exe を実行する。
  8. Install Options: Select where you want to install Cisco SDM.
    インストール先を選択する。ルータのフラッシュに空きが十分ある場合は、[Cisco Router] を、無ければ [This Computer] を選択すればよい。
  9. Router Authentication: Enter router authentication Information.
    ルータの IP アドレスとユーザ名、パスワードを入力する。
  10. Flash installation options: Select the type of installation for Cisco SDM
    [Typical] を選択すればよい。
  11. Select Cisco SDM Components
    規定値でよい。
  12. SDM インストール終了後、IE で、[https://<ルータの IP アドレス>/] へアクセスする。
    * IE、JRE から証明書に関する警告が表示されるので許可する。
    * IE のポップアップ ブロックは無効にする。
    * IE、JRE からの認証ダイアログにユーザ名、パスワードを入力する。
    * Windows ファイアウォールの警告が表示されたら、ブロックを解除する。

参考

2009年5月19日火曜日

email - Encrypted SMTP email via Command line

Cygwin で使用できるコマンドラインのメールクライアント email というものがある。
手軽にメールの試験ができるなかなか便利なものだと思う。

CentOS なら以下のようにして、インストールできる。

$ wget 'http://www.cleancode.org/downloads/email/email-3.1.2.tar.bz2'
$ tar xjf email-3.1.2.tar.bz2
$ cd email-3.1.2
$ ./configure && make
$ sudo make install
$ cp /usr/local/etc/email/email.conf ~/.email.conf
$ vi ~/.email.conf
$ date | email -s "EICAR Test" -a eicar.com user@example.jp

http://www.cleancode.org/downloads/email/README
http://www.cleancode.org/projects/email

2009年5月16日土曜日

bgp suppress-inactive


bgp suppress-inactive コマンドについて、GNS3 で検証してみた。

IP アドレス
  • R1 - f0/0: 192.168.12.1/24
  • R1 - f0/1: 192.168.15.1/24
  • R1 - lo10: 10.10.1.1/24
  • R1 - lo11: 10.11.1.1/24
  • R2 - f0/0: 192.168.12.2/24
  • R2 - f0/1: 192.168.23.2/24
  • R3 - f0/0: 192.168.23.3/24
  • R3 - f0/1: 192.168.34.3/24
  • R4 - f0/0: 192.168.34.4/24
  • R4 - lo10: 10.10.4.1/24
  • R5 - f0/0: 192.168.15.5/24
  • R5 - f0/1: 192.168.23.5/24
BGP に関わる設定
  • R1
    router bgp 1
    no synchronization
    bgp log-neighbor-changes
    network 10.10.1.0 mask 255.255.255.0
    network 10.11.1.0 mask 255.255.255.0
    neighbor 192.168.12.2 remote-as 2
    no auto-summary
  • R2
    router bgp 2
    no synchronization
    bgp log-neighbor-changes
    network 192.168.23.0
    neighbor 192.168.12.1 remote-as 1
    neighbor 192.168.23.3 remote-as 3
    no auto-summary
  • R3
    router bgp 3
    bgp log-neighbor-changes
    neighbor 192.168.23.2 remote-as 2
    neighbor 192.168.34.4 remote-as 4
    !
    address-family ipv4
    neighbor 192.168.23.2 activate
    neighbor 192.168.34.4 activate
    no auto-summary
    no synchronization
    bgp suppress-inactive
    exit-address-family
  • R4
    router bgp 4
    no synchronization
    bgp log-neighbor-changes
    network 10.10.4.0 mask 255.255.255.0
    neighbor 192.168.34.3 remote-as 3
    no auto-summary
show コマンド
  • R3 - show ip route
    R3#sh ip ro | b Gateway
    Gateway of last resort is not set
    10.0.0.0/24 is subnetted, 3 subnets
    S 10.11.1.0 [1/0] via 192.168.23.2
    S 10.10.1.0 [1/0] via 192.168.23.5
    B 10.10.4.0 [20/0] via 192.168.34.4, 00:37:24
    C 192.168.23.0/24 is directly connected, FastEthernet0/0
    C 192.168.34.0/24 is directly connected, FastEthernet0/1
  • R3 - show ip bgp
    R3#sh ip bgp | b Network
    Network Next Hop Metric LocPrf Weight Path
    r> 10.10.1.0/24 192.168.23.2 0 2 1 i
    *> 10.10.4.0/24 192.168.34.4 0 0 4 i
    r> 10.11.1.0/24 192.168.23.2 0 2 1 i
    r> 192.168.23.0 192.168.23.2 0 0 2 i
  • R3 - show ip bgp rib-failure
    R3#sh ip bgp rib-failure
    Network Next Hop RIB-failure RIB-NH Matches
    10.10.1.0/24 192.168.23.2 Higher admin distance No
    10.11.1.0/24 192.168.23.2 Higher admin distance Yes
    192.168.23.0 192.168.23.2 Higher admin distance Yes
  • R4 - show ip route
    R4#sh ip ro | b Gateway
    Gateway of last resort is not set
    10.0.0.0/24 is subnetted, 2 subnets
    B 10.11.1.0 [20/0] via 192.168.34.3, 00:40:22
    C 10.10.4.0 is directly connected, Loopback10
    B 192.168.23.0/24 [20/0] via 192.168.34.3, 00:40:22
    C 192.168.34.0/24 is directly connected, FastEthernet0/0
  • R4 - show ip bgp
    R4#sh ip bgp | b Network
    Network Next Hop Metric LocPrf Weight Path
    *> 10.10.4.0/24 0.0.0.0 0 32768 i
    *> 10.11.1.0/24 192.168.34.3 0 3 2 1 i
    *> 192.168.23.0 192.168.34.3 0 3 2 i
結果の考察

R3 で bgp suppress-inactive コマンドを使っている。

R3 の show ip bgp rib-failure を確認してみた。
BGP より優先される AD 値の ルートがルーティングテーブルにあるネットワークは、Higher admin distance となっている。
その中で、RIB-NH Matches の列が、No になっているネットワーク (10.10.1.0/24) のみが、R4 にアドバタイズされていない。

コマンドレファレンスを調べてみると、RIB-NH Matches の列は、以下の 3 種類がある。(※ 訳に自信無し)
  • Yes: RIB のネクストホップが BGP ルートと同じか、再帰的に辿った結果が、BGP のネクストホップと同じネットワークに隣接している場合。
  • No: RIB のネクストホップを再帰的に辿った結果が、BGP のネクストホップと違う場合。
  • n/a: bgp suppress-inactive が設定されていない。
R3#sh ip bgp rib-failure
Network Next Hop RIB-failure RIB-NH Matches
10.10.1.0/24 192.168.23.2 Higher admin distance No
10.11.1.0/24 192.168.23.2 Higher admin distance Yes
192.168.23.0 192.168.23.2 Higher admin distance Yes

  • 10.10.1.0/24 の BGP のネクストホップは、192.168.23.2 で、スタティックルートのネクストホップは、192.168.23.5 で違うため、RIB-NH Matches = No となる。即ち、BGP でアドバタイズされない。
  • 10.11.1.0/24 の BGP のネクストホップは、192.168.23.2 で、スタティックルートのネクストホップは、192.168.23.2 で同じため、RIB-NH Matches = Yes となる。即ち、BGP でアドバタイズされる。
  • 192.168.23.0 の BGP のネクストホップは、192.168.23.2 で、ルーティングテーブルでは、directly connected である。BGP のネクストホップと同じネットワークに隣接しているため、RIB-NH Matches = Yes となる。即ち、BGP でアドバタイズされる。
bgp suppress-inactive コマンドで、BGP のアドバタイズが抑制されるのは、rib-failure の原因となった、ルーティングテーブルにある AD 値優先のルートと、ネクストホップが違う場合のようだ。
厳密に整合性を維持できるルートのみ BGP でアドバタイズすることを目的とするコマンドと考えれば、この動作は納得がいく。

(注意) 結果の考察に書いてあることは、完全に私の推測です。シスコのドキュメントに基づいた記述ではないことをご了承ください。

参考

2009年5月12日火曜日

Ubuntu で PPPoE サーバ

フレッツなどの、PPPoE の設定を検証するために、Linux で PPPoE サーバが構築できると便利です。

ネットワーク図

{Internet}--[NAT-BOX]--eth0[Ubuntu]eth1--(PPPoE)--[Router]--{192.0.2.64/28}

手順
  • パッケージをインストールする。
    $ sudo apt-get install pppoe
  • /etc/ppp/options を編集する。(DNS は、ISP に OCN を使う場合)
    ms-dns 202.234.232.6
    ms-dns 211.113.139.250
    asyncmap 0
    noauth
    crtscts
    lock
    hide-password
    modem
    mtu 1454
    proxyarp
    lcp-echo-interval 30
    lcp-echo-failure 4
    noipx
  • /etc/ppp/pap-secrets の編集
    hogehoge@hogehoge.ocn.ne.jp * "password" 192.0.2.64
  • /etc/rc.local を編集する。
    iptables -P FORWARD ACCEPT
    iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE
    ifconfig eth1 0.0.0.0
    pppoe-server -I eth1 -L 10.99.99.99 -R 192.0.2.64 -N 1 -m 1414 -O /etc/ppp/options
    exit 0
  • ルートを追加するスクリプトの作成 (/etc/ppp/ip-up.d/99route-add)
    #! /bin/sh
    route add -net $5 netmask 255.255.255.240 dev $1

参考

2009年5月6日水曜日

Windows 7 RC をインストールしてみる



Windows 7 RC 版の配布が開始されたので、早速、64-bit 版をダウンロードし、KVM でインストールしてみました。
2010/6/1 まで使えますが、2010/3/1 からは、2時間毎にシャットダウンするようです。
リモート デスクトップで使用してみましたが、快適に動いています。

最小システム要件は、以下のとおり。
  • 1 GHz or faster 32-bit (x86) or 64-bit (x64) processor
  • 1 GB RAM (32-bit) / 2 GB RAM (64-bit)
  • 16 GB available disk space (32-bit) / 20 GB (64-bit)
  • DirectX 9 graphics processor with WDDM 1.0 or higher driver
インストール
  1. Virtual Machine Manager (virt-manager) を起動
  2. 以下のパラメータで仮想マシンを作成
    OS Type: Windows, OS Variant: Microsoft Windows Vista
    File Size: 50000MB
    Max memory: 2048MB
    Startup memory: 2048MB
    Virtual CPUs: 2
  3. インストール中の再起動で止まってしまうので、"Force Off" 後、"Run" で起動する。(ACPI が対応していないから?)
  4. ウイルス対策ソフトをインストールする。(AVG Free が対応済み)

参考

2009年5月3日日曜日

KVM のネットワーク設定

KVM の仮想マシンが外部のネットワークへ接続するには、NAT を使う方法が簡単です。
ただし、この方法では外部のホストから仮想マシンへアクセスできない。
ホスト OS の物理インタフェースを通して、外部のホストから仮想マシンへのアクセスを許すには、ブリッジの設定が必要となる。

ホスト OS のブリッジの設定
  1. /etc/network/interfaces を編集する
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet manual

    auto br0
    iface br0 inet static
    address 192.168.1.10
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off
  2. ネットワーク設定の変更を反映する
    $ sudo /etc/init.d/networking restart
  3. iptables、ufw などのファイアウォール設定を変更する
    私の場合は、ufw を使用しているので、FORWARD のデフォルト ポリシーを ACCEPT に変更する
    $ sudo vi /etc/default/ufw ← DEFAULT_FORWARD_POLICY="ACCEPT" に変更
    $ sudo ufw reload ← 変更を反映


参考

2009年5月2日土曜日

Ubuntu Desktop 9.04 のネットワーク設定

Ubuntu Desktop Edition では、Network Manager を用いて、ネットワーク設定をするようになっている。
ネットワーク設定が頻繁に変わる可能性がある場合は、便利かもしれない。
しかし、Network Manager によって設定が変更されたくないこともある。
/usr/share/doc/network-manager/README.Debian によると、/etc/NetworkManager/nm-system-settings.conf で、unmanaged/managed mode を切り替えられる。Ubuntu 9.04 の場合、規定値では unmanaged mode になっている。/etc/network/interfaces で設定されている有線/無線のデバイスについては、Network Manager によって変更されない。


参考