木曜日, 2月 23, 2006

iptables で router(ルーター)

ずっと前にiptablesの話を書こうと言っていました。
やっと実現。

といっても、フィルターの部分は次回に。
今回はルーターとしての動作について書きます。
iptables自体はデフォルトで組み込まれているので、インストールとかは問題ないですね。

後は設定ファイルを作ります。といっても、コマンド羅列したスクリプトです。
--------------------------------
#!/bin/sh

trusthost='192.168.2.1'
internal_ip='192.168.0.0/16'

my_internet_ip='xxx.xxx.xxx.129'
my_internal_ip='192.168.1.1'

echo 1 > /proc/sys/net/ipv4/ip_forward

##############
#Flush & Reset
##############
iptables -F
iptables -t nat -F
iptables -X

##############
#Deafult Rule
##############
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -s $internal_ip -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 --protocol tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#################
#SNAT(masquerade)
#################
iptables -t nat -A POSTROUTING -o eth1 -s $internal_ip -j SNAT --to-source $my_internet_ip

#################
#DNAT(masquerade)
#################
iptables -t nat -A PREROUTING -i eth1 --protocol tcp --dport 80 -j DNAT --to-destination $trusthost
--------------------------------
これを実行すれば、ルーターとして動作します。

最初の部分は変数の定義。自分の2つのIP(内側と外側)や、プライベートネットワークのアドレス、後で出てくるポートフォワード(port foward)先のホストなんかを定義してます。
echoの行はルーターとして動作させるために必要です。これをしないとFORWARDが使えません。

次の部分は、まさに初期化。デフォルトのテーブル以外にNAT用のテーブルも使います。

その次がやっとルール。
ここでは、「すべて拒否」の後、「内から外は許可」、「外から80番ポートへのアクセスはtrusthostに転送」、「コネクションが確立した後のパケットは両方向許可」のルールを作成しています。
まあ、最後のは少し嘘ですが、イメージはそんな感じです。このルールを書かない状態が存在するのか謎です。

最後の二つがSNAT(sourceに基づくアドレス変換)とDNAT(destinationによるアドレス変換)です。
この二つがルーターとしては肝ですかね。まあ、シンプルですけど。
MASQUERADEを使った書き方もありますが、PPP接続のように動的にIPが変わる場合に使うものです。
そうでない場合はSNATやDNATを使います。(と、manに書いてある)

これで、プライベートネットワークからインターネットへの接続が許可されます。
さらに、80番ポートへのアクセスはプライベートネットワーク内のホストの80番に転送されるわけですね。
同じように書いていけば、転送するポートやホストを増やせます。
まあ、そんなルール、書かずに済んだほうが幸せな気もしますが。

daemontools

qmailやdjbdns(tinydnsやdnscache)を動かすにはdaemontoolsが必要です。
これが結構使えます。

以前、tinydnsも使いたくないなんて書いてたくせに、人って結構いい加減。

早い話、D. J. Bernsteinさんのものだけでなく自分の作ったスクリプトにも使おう、という話。
そうすれば、異常終了してしまっても勝手に再起動されるのでいい感じです。
起動や停止に関するツールも流用できるし、ログの処理なんかもおまかせ。
こういうのって自分で作るのは面倒ですからね。

使い方は、
1. 適当なディレクトリを作る
2. そこにrunスクリプトを作成
と、他のソフトをまねます。

runスクリプトの中身も簡単です。
たとえば、特定のportをforwardしたいときには、
--------------------------------
#!/bin/sh
exec 2>&1

ssh -gN -b 192.168.1.1 -l username -i /home/username/.ssh/id_dsa -L 10001:localhost:110 remote.host
--------------------------------
みたいにできます。
ホスト間の接続が不安定で、たまにsshが終了しても、自動で再起動。こりゃ便利だ。

火曜日, 2月 21, 2006

apt-get で GPG のエラー

ちょっといまさら感がありますが、年を越してからapt-getでエラー(ほんとは警告)が出るようになりました。

W: GPG error: http://debian.cn99.com testing Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 010908312D230C5F
W: GPG error: http://security.debian.org testing/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 010908312D230C5F
W: You may want to run apt-get update to correct these problems

こんなエラーです。

これ、Debianのtestingバージョンを使ってる人はでてしまうんですね。
というのも、Debianのtestingバージョンでは毎年GPG鍵の期限が来てしまうので、更新しないといけないんです。
くどくど2回もtestingと書いているのは、これ、stableでは起きないんですね。

で、リンクにもありますが、
wget http://ftp-master.debian.org/ziyi_key_2006.asc
を実行して、新しい2006年用の鍵を取ってきます。

これを、
apt-key add ziyi_key_2006.asc
でインストールすればOK。

これで後は安心してaptが使えるようになります。

木曜日, 2月 16, 2006

Compiz

Novellが開発したウィンドウ・マネージャ。
同じくNovellが開発したXglフレームワークの上で動作します。
もう、デモを見てくれ!という感じ。
ウィンドウがふにゃふにゃ動いてすごい。ちょっと酔いそう。
そうかと思うと、デスクトップ自体がぐるぐる回ったり、どこでもズームできたり。
ビデオを壁紙みたいに使ったりできます。(そのくらい軽い!)
昔、スクリーンセーバーで熱帯魚を飼うソフトがあったけど、デスクトップで飼えます。

VISTAがどれほどのものかは知りませんが、このインパクトにはなかなか勝てないのでは。
LinuxがエンターテイメントOSになりそう。

infology

infomation technologyを略してinfology。
これくらいはひねらないとドメインとれないかな?と思って考えました。
ためしにGoogleで検索したら結構ヒットした。。。
でも、ドメインは取れたから、まあ、いいか。
IT関連はこちらに書きます。

水曜日, 2月 08, 2006

GmailのChat機能

気がついたらGmailが更新されてました。
Google Talkでの会話をGmailのアカウントに保存できます。

試してみると、ちゃんと保存されてました。当たり前か。
どこのパソコンでChatしても会話の記録がばらばらに別れたりしなくていいですね。
MSNなんかだと、パソコンごとに保存されるのでまとめる気にもならないですし。

これで後は、友達を作るだけ。