2007年3月27日火曜日

libnetfilter_conntrack

svn update をしたところ、ちょこっと変更されていたので再 make。以前手元の automake (aclocal?) で作成された configure が不完全で無理矢理手直ししていたが解消。その代わりと言ってはナンだが pkg-config の設定? をきちんとせねばらななくなった。何のことは無い PKG_CONFIG_PATH=/usr/local/lib/pkgconfig して configure 走らせれば良いだけのコト。忘れないよーに。

virtual IP

結果としては keepalived.conf の virtual_ipaddress のサブネットを指定し忘れていたのがイカンかった。正しくは
virtual_ipaddress {172.27.100.254/24 } 
のサブネット /24 を指定しなかったために /32 が via 実アドレスで OSPF に流れてしまい、さてこの /32 をどうやって消そうか。とウンウン悩んでしまった。

なので設定ミス。ということだったけど VRRP (HSRP) の Virtual IP アドレスを OSPF で配布する場合の一般的な方法ってどうしてるんだろ? 今回は keepalived の向こう側のセグメントを static で virtual IP アドレス。としてしまったが。

本来は広告する側で制御すべきものだと思うのだけど directory connected なので route-map 使えないし OSPF で distribute-list 使わん方が良いと書かれているし Cisco の FAQ 見ると RFC でエリア内は必ず優先する。ってある。む〜ん...

2007年3月13日火曜日

うっとーしー ssh アクセスの客

自宅につなぎっぱのノート PC があり、どこからでも ssh のアクセス OK だけどパスワード認証はだめだよ。としていたけど
Mar 12 23:59:30 localhost sshd[6163]: Invalid user test from  ###.###.###.###
Mar 12 23:59:31 localhost sshd[6165]: Invalid user guest from ###.###.###.###
Mar 12 23:59:32 localhost sshd[6167]: Invalid user admin from ###.###.###.###
みたいなログが沢山で ADSLモデムのランプがちゃかちゃかと...

何か良いものは無いかと探したところ perl のスクリプトでログ見て iptables のルール作るようなものがあったけど...で、更に探してみたところ iptables の recent というモジュールがあった。先にこっち見付けるべきだろ。

-A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name DEFAULT --rsource -j DROP

ssh の最初の syn を送ってきたソースアドレスを DEFAULT という名前のリストに保存。このリストにエントリがあって 60秒間に 5回以上アクセスしてきたら DROP。う〜ん、ありがたい...

2007年2月28日水曜日

conntrackd の internal と external cache

include/conntrackd.h から

struct ct_sync_state {
struct cache *internal; /* internal events cache (netlink) */
struct cache *external; /* external events cache (mcast) */

internal の netlink って kernel conntrack table と同義?

IPS_ASSUREDって?

TCPの場合

struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp4 =
{
....
.packet = tcp_packet,

struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp6 =
{
....
.packet = tcp_packet,
net/netfilter/nf_conntrack_proto_tcp.c::tcp_packet()にて

  • IPS_SEEN_REPLY が立っていて

  • IPS_ASSURED が立っていなくて

  • old_state が TCP_CONNTRACK_SYN_RECV か TCP_CONNTRACK_ESTABLISHED で new_state が TCP_CONNTRACK_ESTABLISHED

の場合 conntrack->status に IPS_ASSURED を立てる...とゆーことは IPS_SEEN_REPLY が前提。nf_conntrack_proto_tcp.c の頭の方に TCP の conntrack での状態遷移あり。機会があれば絵にしたいなぁ。

2007年2月22日木曜日

zd1211rw の Master mode

zd1211rw デバイスに対して iwconfig eth# mode Master とすると、エラー。ちょっと眺めると ioctl のリクエストコード SIOCSIWMODE については zd_mac.c:int zd_mac_set_mode() が処理。中を見ると
        switch (mode) {
case IW_MODE_AUTO:
case IW_MODE_ADHOC:
case IW_MODE_INFRA:
mac->netdev->type = ARPHRD_ETHER;
break;
case IW_MODE_MONITOR:
mac->netdev->type = ARPHRD_IEEE80211_RADIOTAP;
break;
default:
dev_dbg_f(zd_mac_dev(mac), "wrong mode %u\n", mode);
return -EINVAL;
}
include/linux/wireless.h で定義されてる
#define IW_MODE_MASTER  3       /* Synchronisation master or Access Point */
は EINVAL 扱い。というわけで他力本願としては zd_mac.c をパッチの都度眺めるということで。

単身赴任者のネットワーク 1

仕事の都合上ウィークデイは独身貴族^H^H^H^H単身赴任という辛い状況なのです。で自宅からとアパートから、2箇所からインターネットに接続できる環境にあるので 簡単な VPN環境となっています。字ばっかの blog もなぁ。と図を書こうと dia を立ち上げたものの、上手いことイカン。

スクリプト書いて、それ実行すれば良いだけなのだけど、備忘録としてメモ。自宅の ISP IPV4 アドレスとアパートの ISP IPv4 アドレス間で IPSec の transparent モード。更に gre 掘る。何で gre にしたかとゆーと、IPv6 も使いたかったから。quagga で ospf6d 動かしたかったから。ハマッたのは MTU が違ったので、小さい方に合わせた点。いじょ。
ip link set gre1 up multicast on mtu 1388
# あ、木曜日定例の洗濯機のピーピー音が...