memoの方にまとめられるほど調べてないので走り書き。
topology net30でもクライアントがUnixなら ccd/* で ifconfig-push して任意の端点アドレスを付けられるようだ。クライアントに 振るアドレスを x.y.z.w とした場合、route x.y.z.w 255.255.255.255 して、かつccd/* で iroute x.y.z.w 255.255.255.255 しておけばそのアドレスにパケットが 届く。
ただ、pppでやるときのようにproxy arpをしようと思っても tunに振られたアドレスに対して arp -s * * pub できない。 non 802 でばいすー、と怒られる。一度tunに付いたアドレスを消して から arp -s してまたtunに同じアドレスを付け直せばいいけど、 めんど。それやるくらいなら tap モードでやった方が良い。 tapは離れたLANに手元のLANがいっちゃうからパケットフィルタを 書くのを慎重にせねば。どっちもどっちか? 接続先を信頼はしてるわけだから そんなに慎重にしなくていいか。じゃtapかな。
OpenVPN-2.1rc4は、Windows 2000 SP4 で tap-win32 が うまくロードできなかった。うちだけ? Windows XP はいけた。 あっさり使えた。楽だ。
UDPの場合、帰りパケットのソースアドレスが必ず そのインタフェースのプライマリアドレスになってしまう(VTunは ちゃんと、リクエストされたIPアドレスがお返事のソースアドレスになる)。 てことで、マルチホームなんかしてる場合帰りパケットが クライアントに帰って行かない。つまり、外部ネットワークからの 接続要求と、自宅無線LANからのそれを一元化できない。 なので、lo0に付けたaliasアドレスとかでLISTENさせて、 パケットフィルタ(PF)などの力を借りて、LANにやってきた1194/udp を lo0の 1194/udp にfwdする。力業。これでうまくいく。 うはは、つーじねー。
tapモードの場合、ラップトップPCなど、 割とすぐリブートするホストはtapデバイスの MACアドレスを固定しとかないとサーバ側LANのホストのarpテーブルに 古いエントリが残ってリブート後通信できなくなる。NetBSDは sysctl -w net.link.tap.tapN= で FreeBSDはifconfig tapN link でセットするらしい。お、できた。 それぞれ、/etc/ifconfig.tapN /etc/rc.confの変数に書いとけばよかろう。
これはいいぞ。無線LANを含めた全ての物理接続のLAN参加認証基盤として ベストではなかろうか。PPP over SSHはUnixはいいけど、Windowsは 導入が面倒で、通信速度が遅かった。