KAMEと戯れる
$Id$
%Hd: KAMEと戯れる
o 目次
o IPv6の設定
FreeBSD4.0以降
o ping6 してみる。
- ping6 してみる。
% ping6 -c 1 ::1
PING6(56=40+8+8 bytes) ::1 --> ::1
16 bytes from ::1, icmp_seq=0 hlim=64 time=1.128 ms
--- ::1 ping6 statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.128/1.128/1.128 ms
% tcpdump -xnti lo0
tcpdump: listening on lo0
::1 > ::1: icmp6: echo request
6000 0000 0010 3a40 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
0000 0000 0000 0001 8000 9641 a50b 0000
bda6 2f37 5688 0100
::1 > ::1: icmp6: echo reply
6000 0000 0010 3a40 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
0000 0000 0000 0001 8100 9541 a50b 0000
bda6 2f37 5688 0100
おおぉぉお!
o IPv4 トンネル張って、IPv6 ホスト同士でおしゃべりしてみる。
ホスト A, B を用意する。IPv6/v4 アドレスをそれぞれ
A: 3ffe:501:808:5::1/10.0.0.1
B: 3ffe:501:808:5::2/10.0.0.2
とすると、
ホスト A 側
% gifconfig gif0 inet 10.0.0.1 10.0.0.2
% ifconfig gif0 inet6 3ffe:501:808:5::1 3ffe:501:808:5::2 prefixlen 64
ホスト B 側
% gifconfig gif0 inet 10.0.0.2 10.0.0.1
% ifconfig gif0 inet6 3ffe:501:808:5::2 3ffe:501:808:5::1 prefixlen 64
ホスト B 側で
% ftp 3ffe:501:808:5::1
Connected to 3ffe:501:808:5::1.
220 A FTP server (Version 6.00) ready.
Name (3ffe:501:808:5::1:hoge):
% tcpdump -nqti ep0
tcpdump: listening on ep0
203.178.141.215 > 203.178.141.195: 3ffe:501:808:5::2.1028 > 3ffe:501:808:5::1.21: tcp 0 (encap)
203.178.141.195 > 203.178.141.215: 3ffe:501:808:5::1.21 > 3ffe:501:808:5::2.1028: tcp 0 (encap)
203.178.141.215 > 203.178.141.195: 3ffe:501:808:5::2.1028 > 3ffe:501:808:5::1.21: tcp 0 (encap)
203.178.141.195 > 203.178.141.215: 3ffe:501:808:5::1.21 > 3ffe:501:808:5::2.1028: tcp 55 (encap)
203.178.141.215 > 203.178.141.195: 3ffe:501:808:5::2.1028 > 3ffe:501:808:5::1.21: tcp 0 (encap)
おおぉぉお!
o KAME で IPsec してみる
システムの初期状態
% sysctl net.inet6.ipsec6
net.inet6.ipsec6.def_policy: 1 <- ポリシが無い時の動作
net.inet6.ipsec6.esp_trans_deflev: 1 <- ESP tranport mode が指定された時の default のレベル
net.inet6.ipsec6.esp_net_deflev: 1 <- ESP tunnel mode が指定された時の default のレベル
net.inet6.ipsec6.ah_trans_deflev: 1 <- AH tranport mode が指定された時の default のレベル
net.inet6.ipsec6.ah_net_deflev: 1 <- AH tunnel mode が指定された時の default のレベル
net.inet6.ipsec6.inbound_call_ike: 0
net.inet6.ipsec6.ecn: 0
レベルとは、SAあるなら使うとか、SA 無いとヤダとか。
# setkey -D
No SAD entries.
- localhost で IPsec な ping をしてみる。
※ICMP reply の policy 注意。
# setkey -c
add 127.0.0.1 127.0.0.1 icmp 9999 -p esp -E des-cbc "hogehage" ;
dump ;
127.0.0.1/32[0] 127.0.0.1/32[0] icmp
esp spi=9999(0x0000270f) replay=0 flags=0x00000000
E: des-cbc 686f6765 68616765
state=mature seq=0 pid=3087
created: May 5 11:17:08 1999 current: May 5 11:17:11 1999
diff: 3(s) hard: 0(s) soft: 0(s)
last: hard: 0(s) soft: 0(s)
current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 0 hard: 0 soft: 0
dir=bi-direction refcnt=0
^D
- ping してみる。
# ping -c 3 127.0.0.1 /dev/null
# tcpdump -nqti lo0
127.0.0.1 > 127.0.0.1: icmp: echo request
127.0.0.1 > 127.0.0.1: icmp: echo reply
:
socket または SPDB にポリシが無いので、この状態では IPsec されない。
- ping にポリシを設定する。
# ping -P 'ipsec esp/use' -c 3 127.0.0.1
# tcpdump -nqti lo0
127.0.0.1 > 127.0.0.1: ESP(spi=9999,seq=0x2)
127.0.0.1 > 127.0.0.1: icmp: echo reply
:
ICMP echo replay のポリシが設定されていないので、帰りは IPsec されない。
- SPD を設定する。
# setkey -c
spdadd 127.0.0.1 127.0.0.1 icmp -P ipsec esp/use ;
spddump ;
127.0.0.1/32[0] 127.0.0.1/32[0] icmp
ipsec
esp/use
seq=0 pid=614
dir=bi-direction refcnt=0
さて、
# ping -P 'ipsec esp/require' -c 3 127.0.0.1
# tcpdump -nqti lo0
tcpdump: listening on lo0
127.0.0.1 > 127.0.0.1: ESP(spi=9999,seq=0x1f)
127.0.0.1 > 127.0.0.1: ESP(spi=9999,seq=0x20)
:
- telnet 127.0.0.1 echo
# setkey -c
add 127.0.0.1 127.0.0.1 tcp 9998 -p esp -E des-cbc "hogehage" ;
spdadd 127.0.0.1 127.0.0.1 tcp -P ipsec esp/use ;
^D
% telnet 127.0.0.1 echo
# tcpdump -nqti lo0
tcpdump: listening on lo0
127.0.0.1 > 127.0.0.1: ESP(spi=9998,seq=0x1) (DF)
127.0.0.1 > 127.0.0.1: ESP(spi=9998,seq=0x2) (DF)
:
- ホスト A (10.0.0.1), B (10.0.0.2) で A->B へ telnet した時、
IP[AH][ESP] してみる。
ホストA側
# setkey -c
add 10.0.0.1 10.0.0.2[23] 7999 -p ah -A hmac-md5 "hogehogehogehoge" ;
add 10.0.0.1 10.0.0.2[23] 7998 -p esp -E des-cbc "hogehoge" ;
add 10.0.0.2[23] 10.0.0.1 6999 -p ah -A hmac-md5 "hogehogehogehoge" ;
add 10.0.0.2[23] 10.0.0.1 6998 -p esp -E des-cbc "hogehoge" ;
^D
ホストB側
# setkey -c
add 10.0.0.1 10.0.0.2[23] 7999 -p ah -A hmac-md5 "hogehogehogehoge" ;
add 10.0.0.1 10.0.0.2[23] 7998 -p esp -E des-cbc "hogehoge" ;
add 10.0.0.2[23] 10.0.0.1 6999 -p ah -A hmac-md5 "hogehogehogehoge" ;
add 10.0.0.2[23] 10.0.0.1 6998 -p esp -E des-cbc "hogehoge" ;
spdadd 10.0.0.1 10.0.0.2[23] tcp -P ipsec esp/use ah/use ;
^D
ホスト A 側で
% telnet -P 'ipsec esp/require ah/require' 10.0.0.2
または
# setkey -c
spdadd 10.0.0.1 10.0.0.2[23] tcp -P ipsec esp/use ah/use ;
^D
すると OK.
o IPv6 ルータで遊ぶ。
rc.net6 を眺める。
とりあえず RIPng.
router で route6d を動かす。
-A とかで適当にアグリゲートする。
RA を流すインターフェイスに対して rtadvd を動かす。
クライアントは一発 rtsol を動かす。
以上。
o v6 ネットワークにつないでみる。
悪い事は言いません。
v6 ネットワークに行く前に ssh, im 位は ports から make しておきましょう。
v6 ホストを boot するとインターフェイスに link local なアドレスが
割り振られる。
% ifconfig sn0
sn0: flags=8843 mtu 1500
inet6 fe80:8::200:86ff:fe05:c2d8 prefixlen 64
ether 00:00:86:05:c2:d8
何故 8 ?index の割り当て順は?
% netstat -nrf inet6
Routing tables
Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UH lo0
fe80:1::/64 fe80:1::200:86ff:fe05:c2d8 Uc gif0
fe80:1::200:86ff:fe05:c2d8 ::1 UH lo0
(snip)
fe80:8::/64 link#8 UC1 sn0
ff01::/32 ::1 U lo0
ff02:1::/32 fe80:1::200:86ff:fe05:c2d8 UC gif0
(snip)
ff02:8::/32 link#8 UC1 sn0
ホストを v6 ネットワークにつないで、router solicitation を垂れ流すと
# sysctl -w net.inet6.ip6.forwarding=0
# sysctl -w net.inet6.ip6.accept_rtadv=1 -> これ絶対忘れる…
# rtsol sn0
router advertisment を受けてアドレスと経路が追加される。
# ifconfig sn0
sn0: flags=8843 mtu 1500
inet6 fe80:8::200:86ff:fe05:c2d8 prefixlen 64
inet 203.178.141.208 netmask 0xffffffe0 broadcast 203.178.141.223
inet6 3ffe:501:4819:2000:200:86ff:fe05:c2d8 prefixlen 64
ether 00:00:86:05:c2:d8
% netstat -nrf inet6
Routing tables
Internet6:
Destination Gateway Flags Netif Expire
default fe80:8::260:97ff:fec2:80bf UGc sn0
::1 ::1 UH lo0
3ffe:501:4819:2000::/64 link#8 UC1 sn0
fe80:1::/64 fe80:1::200:86ff:fe05:c2d8 Uc gif0
fe80:1::200:86ff:fe05:c2d8 ::1 UH lo0
(snip)
fe80:8::/64 link#8 UC1 sn0
fe80:8::260:97ff:fec2:80bf 0:60:97:c2:80:bf UHL1W sn0
fe80:8::5254:ff:fedc:5217 52:54:0:dc:52:17 UHL1W sn0
ff01::/32 ::1 U lo0
ff02:1::/32 fe80:1::200:86ff:fe05:c2d8 UC gif0
(snip)
ff02:8::/32 link#8 UC1 sn0
o v6 ネットワークで v4 ホストと喋りたい。
setenv GAI aaaa::
faithd
faith aaaa:: on
kernel に 1 つだけ
resolver は v4
security に問題あり
例えば
% ./imget --verbose --src=pop/APOP:hoge@hage.net
o V6 ready な HTTP サーバを作る。
1. KAME パッチ付き apache を用意する。
FreeBSD は kit/ports/apache13 から。
2. httpd.conf の Listen ディレクティブに以下を追加。
Listen :: 80
o KAME boot フロッピを作る。
方法1
kit/release の下の README.v6 の通りに作る。
この通りやってもよいけどディスク喰うので、オリジナルのソースで必要な物だけを展開する。
方法2
1. /usr/src/kit, /usr/src/sys はKAME
2.
README.v6 の (5) をこれに置き換える。
sbase 全部
sbin sh pwd
scontrib cpio
setc 全部
sgnu ?
ssbin ft newfs fsck mount_nfs
sshare ?
ssys KAMEを使うので必要無い。
subin find gzip cpio
susbin bad144
この方法だと make に必要な容量は n MB 。
以下は相当古い情報。
o とりあえず KAME を突っ込んでみる。
注意: PAO-19990405 は 2.2.8-STABLE に対する
パッチなので、KAME にパッチを当てるともしかして障害があるかもしれない。
用意する物
FreeBSD 2.x, FreeBSD 3.x, BSD/OS 3.x or NetBSD x
やんちゃでも許す人用 ftp://ftp.kame.net/pub/kame/snap
そうでない人用 ftp://ftp.kame.net/pub/kame/stable"
でも、snap の方がより stable だったりする。:-)
※kit/INSTALL を読めば、さくっと install できるはず。多分きっと。
出来なければ言って下さい。
以下、kame-19990503-fbsd228-snap.tgz のインストール例
最新版は KAME-snapから。
o KAME を使うためのツールを作る
これも kit/INSTALL の通り。
kit と sys は同じディレクトリに無いとはまる。
rc.net6 を rc に追加するのを忘れずに。
# cp /usr/local/v6/etc/rc.net6.sample /usr/local/v6/etc/rc.net6
# echo '[ -f /usr/local/v6/etc/rc.net6 ] && sh /usr/local/v6/etc/rc.net6'\
>> /etc/rc.local
あと path と MANPATH。