Nov 202009
 

マルチホームなLinuxマシンで、受信したNICインターフェース側から応答を返す方法をCentOS 5.4で実装する方法です。

複数のアップリンク/プロバイダに対するルーティング
として例示される設定を、スクリプトではなくCentOSの設定ファイルで記述してみます。

上記例でのポイントはip route addコマンドの実行とip rule addコマンドの実行です。
Fedora等のRed Hat系ではNICインターフェースのアップ時(/sbin/ifupコマンド実行時)に、/etc/sysconfig/network-scripts配下のifup-ethやifup-routesコマンドが呼びだされます。

ifup-routesスクリプトを眺めてみると、route-eth*やrule-eth*を記述しておくとその内容を引数にしてそれぞれip route addとip rule addを実行してることがわかります。

この方法のよいところはifdown実行時にifdown-routesスクリプトでルールの削除処理(ip rule del)もおこなってくれるところです。

構成

ネットワーク構成

                     +------------+       +----------
                     |            |       |
       +-------------+ Provider 1 +-------+
       |             |            |       |
+------+-------+     +------------+       |
|     eth1     |                          |
|              |                          |
| Linux router |                          | Internet
|              |                          |
|     eth2     |                          |
+------+-------+     +------------+       |
       |             |            |       |
       +-------------+ Provider 2 +-------+
                     |            |       |
                     +------------+       +----------

Provider 1構成

  • N/W アドレス: 192.0.2.0/25
  • Linux IPアドレス: 192.0.2.1
  • Provider1 IPアドレス: 192.0.2.126

Provider 2構成

  • N/W アドレス: 192.0.2.128/25
  • Linux IPアドレス: 192.0.2.129
  • Provider1 IPアドレス: 192.0.2.254

設定内容

/etc/iproute2/rt_tablesの末尾にテーブルを追加。

200 Provider1
201 Provider2

/etc/sysconfig/network-scripts/route-eth1

192.0.2.0/25 dev eth1 src 192.0.2.1 table Provider1
192.0.2.0/25 dev eth1 src 192.0.2.1
default via 192.0.2.126 table Provider1

/etc/sysconfig/network-scripts/route-eth2

192.0.2.128/25 dev eth2 src 192.0.2.129 table Provider2
192.0.2.128/25 dev eth2 src 192.0.2.129
default via 192.0.2.254 table Provider2

/etc/sysconfig/network-scripts/rule-eth1

from 192.0.2.1 table Provider1

/etc/sysconfig/network-scripts/rule-eth2

from 192.0.2.129 table Provider2

defaultルートは/etc/sysconfig/network-scripts/ifcfg-eth*のどちらかにGATEWAYを設定すればOKです。

一点気になるのは、/etc/sysconfig/network-scripts/ifup-routesスクリプトでip route addコマンドの引数をそのまま記述する方式は”older format”とコメントされていることです。
もしかしたら近い将来使えなくなるのかも知れませんが、Fedora 12ではまだ使えるようなのでしばらくは大丈夫でしょう 😛

■2010-08-10追記
コメントでご指摘のとおりファイル名が間違っていましたので修正しました。
ご指摘ありがとうございました。

Aug 152008
 

FileZillaでcoreserverにFTPES接続できなくなりました。FileZillaのバージョンは3.1.0.1, 3.1.1-rc1です。

コマンド:	LIST
応答:	150 Opening ASCII mode data connection for file list
状態:	Server did not properly shut down TLS connection
エラー:	Could not read from transfer socket: ECONNABORTED - Connection aborted
応答:	226 Transfer complete.
エラー:	ディレクトリ一覧表示の取り出しに失敗しました

本家のForumにも話題があがっているのですが、ftpサーバのバージョンが古いと発生するようです。
FileZilla Forums • View topic – ECONNABORTED: It’s the server’s fault!
coreserverで使われているProFTPDの場合、CVS HEADでないと直らないようですので解決されるのは先になりそうな予感。

仕方がありませんので、当面FileZillaを2.2.32にダウングレートして使うことにしました。

古いバージョンのダウンロードリンクは以下のフォーラムに記載されています。
FileZilla Forums • View topic – D/L links of Filezilla 2 / 3 for older OS(WinNT/Win2K/Tiger)
注意書きにもあるように非サポートかつ脆弱性の存在がわかっているバージョンですので、利用時は自己責任でどうぞ。

■2008-09-06追記
3.0.11.1でも大丈夫みたいです。

Oct 232007
 

例示用、テスト用に使用できる予約ドメインがあるのはいまや有名な話。
RFC 2606 – Reserved Top Level DNS Names

IPv4アドレスにも例示用に使用できる領域が予約されている。
RFC 3330 – Special-Use IPv4 Addresses

  • APIPAでアサインされるアドレス
    169.254.0.0/16 – This is the “link local” block.
  • 例示用はこれ
    192.0.2.0/24 – This block is assigned as “TEST-NET” for use in documentation and example code.
  • ベンチマークテスト用なんてのもある
    198.18.0.0/15 – This block has been allocated for use in benchmark tests of network interconnect devices.

など。他にもいろいろ書かれている。

ドキュメンテーションや例示用の場合、ドメイン名にはexample.jpとかexample.comを、IPアドレスには192.0.2.0/24を使おう、ということになる。

Jun 252007
 

以前書いたかも知れないけど。

NFSのポート番号を固定にする方法

portmap本体は固定されているし(udp/111)、nfsも事実上{tcp,udp}/2049しか使われない。
しかし、rpc.statdやrpc.mountdはportmapでころころかわるので、それを決める必要がある。

CentOS 3あたりの場合、/etc/sysconfig/nfsを作って

STATD_PORT=
STATD_OUTGOING_PORT=
MOUNTD_PORT=

を書いてあげればrpc.statdとrpc.mountdのポートを決めうちにできる。

参考

FTP passiveモードのデータポート範囲を固定にする方法

vsftpdの場合、vsftpd.confでpasv_min_portとpasv_max_portを指定すればよい。

pasv_enable=YES
pasv_min_port=3000
pasv_max_port=3009

IIS 6.0のFTPの場合は

>C:\Inetpub\AdminScripts\adsutil.vbs SET /MSFTPSVC/PassivePortRange "3000-3009"

のようにする。
PassivePortRange の IIS の構成方法

ZABBIXで特定ポートの通信データ量を収集

 article  Comments Off on ZABBIXで特定ポートの通信データ量を収集
Aug 092006
 

ZABBIXを使って特定ポートの通信データ量を収集してみます。
iptablesを使ってあらかじめ特定ポートの通信データ量が記録されるようにしておき、ZABBIXからはUserParameterでiptablesコマンドを実行して、そのデータ量を取得できるようにします。

以下、ssh(tcp/22)の通信データ量を記録する場合の例になります。

iptables登録

まず、記録したいポート番号をiptablesで登録します。

# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT

この結果、iptables –listコマンドで以下のようにパケット数やバイト数を記録できるようになります。

# iptables --list INPUT -nvx
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
    8077   680931 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22

sudoでiptablesコマンドの実行を許可

通常ZABBIX Agentは、zabbixユーザで動作しているため、iptablesコマンドを実行できません。
sudoを使って、特定のiptablesコマンドを実行できるようにしておきます。

zabbix  ALL = NOPASSWD: \
        /sbin/iptables -L INPUT  -nvx,\
        /sbin/iptables -L OUTPUT -nvx

UserParameter登録

/etc/zabbix/zabbix_agentd.confにUserParameterを登録します。

UserParameter=iptables.bytes.input[*],sudo  iptables -L INPUT  -nvx|grep "dpt:$1 $"|awk '{print $ 2}'
UserParameter=iptables.bytes.output[*],sudo iptables -L OUTPUT -nvx|grep "spt:$1 $"|awk '{print $ 2}'

もうちょっと頑張れば、chain(INPUT、OUTPUT)やプロトコル(tcp or udp)も引数指定することが可能ですが、そこまでやってません。

収集テスト

zabbix_getコマンドで登録したキーの値が収集できるか確認します。

$ /home/zabbix/bin/zabbix_get -s 127.0.0.1 -k iptables.bytes.input[22]
725075

[]内の番号はポート番号です。このポート番号でiptablesの出力結果をgrepします。
引数はUserParameterで定義したコマンドの$1になります。

ZABBIX item定義

添付のスクリーンショットのようになります(クリックで拡大)。
実はiptablesを使って特定ポートのトラフィックを計測するアイディアはHotSaNICを参考にさせてもらってます。
グラフの表現力ではまだまだRRDtoolにかないませんが、そこそこのことはZABBIXでもできるということで。

ZABBIX item iptables.traffic.{in,out}

Jul 282006
 

出先から自宅にsshしてメールを読むためにポートフォワード専用ユーザを作りました。
~/.ssh/authorized_keysに以下を記述して、いろいろ制限しています。

no-agent-forwarding,no-X11-forwarding,no-pty,permitopen="localhost:143",permitopen="localhost:80",command="/bin/sleep 8h"

tty端末アクセスを許さず、フォワード可能なポートも制限しています(ポートフォワード自体を禁止したい場合はno-port-forwardingでおこなえます)。

さらに、公開鍵をscpで書き換えられたら意味がないので、sleepコマンドを強制的に実行して実質何もできない状態にしました。

こちらの公開鍵に記述できる内容は、sshd(8)マニュアルのAUTHORIZED_KEYS FILE FORMATに書かれています。

ZABBIX 1.1でネットワークトラフィックを取得するItem定義

 article  Comments Off on ZABBIX 1.1でネットワークトラフィックを取得するItem定義
Jul 052006
 

いつからかZABBIXでネットワークトラフィック情報が収集できなくなっていたのですが、やっと原因がわかりました。キーの値がnetloadinやnetloadoutからnet.if.~に変更になっていたのです。

ZABBIXマニュアルのItemsをみるとnetloadinやnetloadoutというのはなくなっており、net.if.inやnet.if.outというキーが増えています。

しかしnetload*はbps単位で表記される値でしたが、net.if.inやnet.if.outはbytes(デフォルトのmodeの場合)になりますので、キーを単純に置き換えるだけではうまくいきません。

net.if.inやoutを使ってbps単位のトラフィック量を記録するには、Itemで以下のように設定します。

  • Custom maltipilerを8にしてバイト数をビット数にする
  • Store valueを「Delta (speed per second)にして秒単位の値にする

具体的にはページ末に添付した定義になります(いまいち自信なし)。

なお、netloadのときは1分、5分、15分単位でそれぞれキーがありましたが、今回からはキーひとつです。
netloadのように一定時間内でのインターバル平均を収集するには、Itemの設定で”Update Interval (in sec)”を60、300、1500のように変更すれば同様のことがおこなえると思います。

それから、半ば愚痴ですが…
実はZABBIX Agentの一時ファイル(/tmp/zabbix_agentd.tmp)を見ていると、netload{1,5,15}の値はきちんとデータが取れているようにみえます。サーバで収集するタイミングでエラー?になってしまうようでした。だったのでマニュアルをみて確認するのが遅くなってしまいました。
以前のバージョンからのアップグレードの場合だけでなく、クリーンインストールした場合も同じ状態になります。つまりインストール時に作成されるItem定義がすでに古いままなんです。

ZABBIX item net.if.{in,out}

Jun 162006
 

ついにZABBIX 1.1がリリースされました。とはいっても2006-06-02と大分前になりますが。

早速Cobalt Qubeで動かしているDebian/mipselにServerとAgentをビルドしてインストール。

$ tar xzvf zabbix-1.1.tar.gz
$ cd zabbix-1.1
$ ./configure --prefix=/home/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-ldap
$ make
$ sudo make install

以下のsqlを実行してDBスキーマも更新(beta10からのアップです)。

$ mysql -u root zabbix < ./upgrades/dbpatches/1.1beta11_to_1.1beta12/mysql/patch.sql
$ mysql -u root zabbix < ./upgrades/dbpatches/1.1beta12_to_1.1/mysql/patch.sql

プロセス再起動してアップグレード完了。configや起動rcスクリプトは更新不要でした。

週末暇を見て、Solaris 10とGentoo AlphaにもAgentをインストールしてみることにします。常時稼動マシンじゃないけど。

Jun 152006
 

YAMAHAブロードバンドルータRT57iの後継機がInteropで参考出品されていたようです。

私が満足するフィルタリング機能を有する安価なルータとしては、YAMAHA RT57iかCentreCOM AR260Sぐらいしか考えられませんでした。
なおかつIPv6やVoIPできるのはRT57iだけです。何度ヤフオクで入札しそうになったことか。
でも、後継機がでるならもうしばらく待つことにします。RT57i買うにしても、値崩れしそうに思われますし。