ラベル ipv6 の投稿を表示しています。 すべての投稿を表示
ラベル ipv6 の投稿を表示しています。 すべての投稿を表示

2013年4月2日火曜日

feel6でIPv6(on Arch Linux)

プロバイダがPPPoEな固定IPv6サービスを始める気配がまったく無いので、久 しぶりにfeel6(http://start.feel6.jp/)を使ってみる。 ホスト環境はいつも通りArch Linux。

dtcpclientのビルド

dtcpclientのソースをダウンロードしてきてビルドする。FreeBSD用に書かれ ておりそのままではビルドできないため、オリジナルのMakefileを参考に直接 gccを叩く。

また、libbsdがインストールされていない場合は先にインストールしておく。

% wget http://www.imasy.or.jp/~ume/ipv6/dtcpclient-20060111.tar.gz
% tar xzf dtcpclient-20060111.tar.gz
% cd dtcpclient-20060111
% gcc -lbsd -lcrypto -Wall -DPREFIX=\"/usr/dtcp\" dtcpclient.c -o dtcpclient
% ./dtcpclient
usage: dtcpclient [-dDhlnU] [-b udpport] [-B naptport] [-e nickname]
[-f pidfile] [-m mtu] [-p port] [-s script] [-t tuntype] [-u username] server

起動

とりあえずfeel6にDTCPでログインできるか試してみる。 今回はNAT下で利用するため、-nオプションを付ける。-lは切断時の自動再接 続、-dはデバッグモードとなる。

% ./dtcpclient -d -l -n -t network -u ユーザ名 dtcp.feel6.jp 
no authinfo file found
password for hachune:
logging in to dtcp.feel6.jp port 20200
>>> +OK xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx FBDC TunnelBroker (version
0.2) Ready. <578926>:4096
<<< tunnel hachune yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy network
>>> +OK 118.1.71.38 43.244.255.37 2001:03e0:0988::/48
sleep(60)
<<< ping
>>> +OK pong
sleep(60)

ネットワーク設定スクリプトを作成

ログインに成功しアドレスが取得できたことが確認できたので、早速ネットワー ク設定スクリプトを書きなおす。dtcpclientの-sオプションに渡すスクリプト は、ログイン完了時と切断時に引数に以下のように渡され起動されるので、そ れに合わせて記述する。

up dtcp.feel6.jp 10.39.39.37 network 118.1.71.38 43.244.255.37 2001:03e0:0988::/48

LinuxにてIPv6 over IPv4なトンネルを利用する場合は、sitインターフェース を利用する。

#!/bin/sh

DEV=sit0
STATUS=${1}
SERVER=${2}
NLOCAL=${3}
MODE=${4}
LOCAL=${5}
REMOTE=${6}
V6PREFIX=${7}

case ${STATUS} in
up)
        ip link add link ${DEV} type sit
        ip link set dev ${DEV} up
        ip address add `echo ${V6PREFIX} | sed -e 's|/48||'`1/64 dev ${DEV}
        ip -6 route add default via ::${REMOTE} dev ${DEV}
        ;;
down)
        ip -6 route delete default
        ip link delete ${DEV}
        ;;
esac

確認

最後に、通信が確立していることを確認する。プロバイダのDNSサーバを利用 している場合、AAAAフィルタが有効になっていてv6アドレスが引けないことが あるので注意する。

% ping6 -c 4 ipv6.google.com
PING ipv6.google.com(2404:6800:4004:802::1012) 56 data bytes
64 bytes from 2404:6800:4004:802::1012: icmp_seq=1 ttl=53 time=17.6 ms
64 bytes from 2404:6800:4004:802::1012: icmp_seq=2 ttl=53 time=29.9 ms
64 bytes from 2404:6800:4004:802::1012: icmp_seq=3 ttl=53 time=15.5 ms
64 bytes from 2404:6800:4004:802::1012: icmp_seq=4 ttl=53 time=15.8 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 15.518/19.732/29.904/5.929 ms

(参考)AAAAフィルタ

AAAAフィルタが存在する場合

miku@hachune% dig @10.39.39.1 AAAA www.kame.net

; <<>> DiG 9.9.2-P2 <<>> @10.39.39.1 AAAA www.kame.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58213
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;www.kame.net.                  IN      AAAA

;; ANSWER SECTION:
www.kame.net.           71617   IN      CNAME   orange.kame.net.

;; Query time: 16 msec
;; SERVER: 10.39.39.1#53(10.39.39.1)
;; WHEN: Tue Apr  2 11:53:43 2013
;; MSG SIZE  rcvd: 62

AAAAフィルタが存在しない場合

miku@hachune% dig @8.8.8.8 AAAA www.kame.net

; <<>> DiG 9.9.2-P2 <<>> @8.8.8.8 AAAA www.kame.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47873
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.kame.net.                  IN      AAAA

;; ANSWER SECTION:
www.kame.net.           21599   IN      CNAME   orange.kame.net.
orange.kame.net.        21599   IN      AAAA    2001:200:dff:fff1:216:3eff:feb1:44d7

;; Query time: 275 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr  2 11:53:53 2013
;; MSG SIZE  rcvd: 90

2012年1月30日月曜日

NetBSDでぷららのIPv6を利用する

昨年IPv4アドレスが枯渇すると同時にふつうのプロバイダでもじわじわと対応が始まった ネイティブIPv6接続機能。我が家でサブ回線として利用していた plalaでも提供されていたが、 ようやく自宅側の環境が整いつつあるので今になって試してみた。

IPv6にはIPv6対応トンネルアダプタが 必要!」なんて書いてあるが、そんなもんいらねぇんじゃねーの?、ということの確認も兼ねて。

dhcp6cを用意

plalaのIPv6ではPPPoE接続しDHCPv6でアドレスブロックを取得する。 そこで、DHCPv6クライアントをpkgsrcからビルドする。

# cd /usr/pkgsrc/net/wide-dhcpv6
# make install clean
# megurine$ dhcp6c    
usage: dhcp6c [-c configfile] [-dDfi] [-p pid-file] interface [interfaces...]

あっさりと終了。

PPPoEを設定

PPPoE接続の設定はIPv4と同じだが、plalaのIPv6ではIPv4とは異なるログイン IDが必要になる。(詳細: http://www.plala.or.jp/ipv6/access/flow/) パスワードはIPv4と同じでよいらしい。 我が家の場合は光ホームなのでユーザID + @v6h.plala.or.jpとなる。 今回設定した/etc/ifconfig.pppoe1は以下の通り。

create
! /sbin/ifconfig re0 up
! /sbin/pppoectl -e re0 pppoe1
! /sbin/pppoectl pppoe1 myauthproto=chap \
  myauthname=ユーザID@v6h.plala.or.jp \
  myauthsecret=パスワード max-auth-failure=0
up

pppoecfg pppoe1コマンドを実行してphaseがnetworkになっていれば、 接続が確立されている。

megurine$ sudo pppoectl pppoe1
Password:
pppoe1: phase=network
        myauthproto=chap myauthname="ユーザID@v6h.plala.or.jp"
        lcp timeout: 1.000 s
        idle timeout = disabled
        max-auth-failure = 0
        max-noreceive = 15 seconds
        max-alive-missed = 3 unanswered echo requests

pf.confの編集

IPv6でもパケットフィルタは必要、ということでpf.confをIPv6用に設定し直す 必要がある。アドレスの取得にはDHCPv6を用いるので、以下のポートについて検討する 必要があるようだ。

dhcpv6-client   546/tcp    # DHCPv6 Client
dhcpv6-client   546/udp    # DHCPv6 Client
dhcpv6-server   547/tcp    # DHCPv6 Server
dhcpv6-server   547/udp    # DHCPv6 Server

細かいルールは環境や管理者のポリシーによって異なるので、dhcp6cを実行しつつtcpdumpで様子を 見ながら設定を変更すればいいんじゃないかなぁ、と思う(ぇ

21:34:20.077819 PPPoE  [ses 0x3a6f] IP6 fe80::21b:21ff:fec6:d3bc.546 > ff02::1:2.547: dhcp6 solicit
21:34:20.099950 PPPoE  [ses 0x3a6f] IP6 fe80::90:1a00:41a3:dd40.547 > fe80::21b:21ff:fec6:d3bc.546: dhcp6 advertise
21:34:21.088076 PPPoE  [ses 0x3a6f] IP6 fe80::21b:21ff:fec6:d3bc.546 > ff02::1:2.547: dhcp6 request
21:34:21.111510 PPPoE  [ses 0x3a6f] IP6 fe80::90:1a00:41a3:dd40.547 > fe80::21b:21ff:fec6:d3bc.546: dhcp6 reply

リンクローカル・マルチキャストな送信とリンクローカルなユニキャストへの送受信について、 許可が必要な感じ…だろうか。

dhcp6c.confの編集

DHCPv6クライアントは設定が必須のようなので、/usr/pkg/share/examples/wide-dhcpv6/dhcp6c.conf やgoogle先生を参考に/usr/pkg/etc/dhcp6c.confを作成する。IPv4のPPPoE接続ではpppoeデバイス自体に アドレスが割り当てられていたが、DHCPv6ではprefixを割り当てるデバイスを指定する模様。ここではwm0 とした。

interface pppoe1 {
        send ia-pd 0;
};

id-assoc pd {
        prefix-interface wm0 {
                sla-id 1;
                sla-len 0;
        };
};

設定ファイルの作成が終わりPPPoE接続が確立されているなら、 # dhcp6c pppoe1のようにDHCPv6クライアントを起動する。

ルートの設定

DHCPv6でアドレスをwm0に割り当てることができたのだが、dhcp6c.confの書き方が悪いのかルートも resolv.confも設定されなかった。仕方が無いのでpppoe1へデフォルトルートを手動で割り当てる。

sudo route add -inet6 default -iface fe80::21b:21ff:fec6:d3%pppoe1

とりあえず通信をテスト。

megurine$ ping6 -c 3 ipv6.google.com 
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2404:6800:4004:805::1012
16 bytes from 2404:6800:4004:805::1012, icmp_seq=0 hlim=55 time=44.717 ms
16 bytes from 2404:6800:4004:805::1012, icmp_seq=1 hlim=55 time=44.804 ms
16 bytes from 2404:6800:4004:805::1012, icmp_seq=2 hlim=55 time=44.897 ms

--- ipv6.l.google.com ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 44.717/44.806/44.897/0.090 ms

比較用に、月1000円固定IPv4アドレスの某プロバイダのほうもテスト。

megurine$ ping -c 3 www.google.com   
PING www.l.google.com (74.125.235.144): 56 data bytes
64 bytes from 74.125.235.144: icmp_seq=0 ttl=54 time=19.173 ms
64 bytes from 74.125.235.144: icmp_seq=1 ttl=54 time=19.139 ms
64 bytes from 74.125.235.144: icmp_seq=2 ttl=54 time=19.429 ms

----www.l.google.com PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 19.139/19.247/19.429/0.159 ms

サーバが違うのかv6のほうが応答速度が圧倒的に遅くなってしまった。

IPv6といえばkame.net。kame.netに打ってみる。

megurine$ ping6 -c 3 orange.kame.net
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2001:200:dff:fff1:216:3eff:feb1:44d7
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=0 hlim=54 time=33.162 ms
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=1 hlim=54 time=36.307 ms
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=2 hlim=54 time=33.538 ms

--- orange.kame.net ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 33.162/34.336/36.307/1.718 ms
megurine$ ping -c 3 orange.kame.net  
PING orange.kame.net (203.178.141.194): 56 data bytes
64 bytes from 203.178.141.194: icmp_seq=0 ttl=48 time=32.123 ms
64 bytes from 203.178.141.194: icmp_seq=1 ttl=48 time=31.671 ms
64 bytes from 203.178.141.194: icmp_seq=2 ttl=48 time=31.441 ms

----orange.kame.net PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 31.441/31.745/32.123/0.347 ms

ついでにipv6.2ch.netにも打ってみる。

megurine$ ping6 -c 3 ipv6.2ch.net
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2407:3000:6:175::12
16 bytes from 2407:3000:6:175::12, icmp_seq=0 hlim=55 time=22.456 ms
16 bytes from 2407:3000:6:175::12, icmp_seq=1 hlim=55 time=22.704 ms
16 bytes from 2407:3000:6:175::12, icmp_seq=2 hlim=55 time=22.587 ms

--- ipv6.2ch.net ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 22.456/22.582/22.704/0.124 ms
megurine$ ping -c 3 ipv6.2ch.net  
PING ipv6.2ch.net (125.6.175.12): 56 data bytes
64 bytes from 125.6.175.12: icmp_seq=0 ttl=54 time=19.327 ms
64 bytes from 125.6.175.12: icmp_seq=1 ttl=54 time=19.542 ms
64 bytes from 125.6.175.12: icmp_seq=2 ttl=54 time=19.863 ms

----ipv6.2ch.net PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 19.327/19.577/19.863/0.270 ms

v4もv6もほぼ変わらない値に。6to4などに比べればやはりかなり速くなった。難点は固定IPv6アドレスではないってことだけなのだが…また固定オプションはv4同様 お高いプランになるのだろうか…。対応しているルータさえあれば実は要らなかったトンネルアダプタ といい、こういうところがあざといなぁと思わざるを得ない。

2011年4月21日木曜日

OpenBSDで6to4なIPv6ルータを作る

IPv4アドレスがついに枯渇! …ということで、自宅のOpenBSD/macppcなルータでIPv6接続ができるようにしてみた。 今回は、固定IPv4アドレスが既にあるので、6to4を用いてグローバルIPv6アドレスを設定する。

固定IPv4アドレスを割り当て

最初に、IPv4アドレスをルータに割り当てる。 いつも通り、/etc/hostname.pppoe0に設定を書く。 当然ながら、ユーザ名とパスワードは自分の契約しているプロバイダのものに置き換える。 ここで用いられるインターフェースは、gem0がWAN側ネットワークに接続されている物理インターフェース、 pppoe0がPPPoE接続で用いられるインターフェースである。
# /etc/hostname.pppoe0

inet 0.0.0.0 255.255.255.255 NONE \
pppoedev gem0 authproto chap \
authname 'username' authkey 'passwd' up
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1

6to4のトンネルを作成

次に、6to4のトンネルインターフェースを設定する。 OpenBSDのトンネルインターフェースはgifであるので、/etc/hostname.gif0に設定を記入する。
6to4トンネルの宛先は、192.88.99.1で固定の模様。

6to4では、「2002:IPv4アドレスを16進表記したもの::/48」を、 このルータのIPv6ネットワークとして利用することができる。 このルータのグローバルIPv4アドレスは、180.131.124.186なので、 2002:b483:7cba::/48がそれに当たる。
10進→16進変換は、printfコマンドでprintf "%x %x %x %x\n" 180 131 124 186のようにすれば簡単。
# /etc/hostname.gif0

up giftunnel 180.131.124.186 192.88.99.1
inet6 2002:b483:7cba::1 64
!route add -inet6 default 2002:b483:7cba::1

IPv6フォワーディングを有効化

このルータだけがIPv6アドレスを持っていてもあまり面白くないので、 IPv4同様、IPv6フォワーディングを有効化する。 /etc/sysctl.confの以下の部分のコメントアウトを外すだけでOK。
# /etc/sysctl.conf

net.inet6.ip6.forwarding=1

内部インターフェースへのIPv6アドレスの割り当て

内部ネットワークを2002:b483:7cba:39::/64とし、 内部向けインターフェースaxe0に、2002:b483:7cba:39::1を割り当てる。
# /etc/hostname.axe0

inet alias 10.39.39.1 255.255.255.0
inet6      2002:b483:7cba:39::1 64

router advertisement daemonを有効化

IPv6では、DHCPを用いずに動的にIPv6アドレスを割り当てることができる。 OpenBSDでは、rtadvdにより自動割当を行う。 有効化の設定は、/etc/rc.conf.localに、rtadvd_flagsを追加し、 引数に自動割当を行うインターフェース名を記入する。
このrtadvdにより、axe0以下のIPv6対応コンピュータには、axe0のネットワーク 2002:b483:7cba:39::/64の中から自動的にアドレスが割り当てられる。
# /etc/rc.conf.local

rtadvd_flags="axe0"

pfにIPv6のルールを追加

IPv6でも当然ながらフィルタリングは必要なので、pfを設定する。 最低限許可が必要なのは、6to4トンネルのパケットと、自動割り当てに必要なパケットである。 これ以外は必要に応じて追加する。
# /etc/pf.conf

# Pass 6to4 tunnel
pass  out on $ext_if proto ipv6 \
      from pppoe0 to 192.88.99.1
block in log (all) inet6

# Pass Router Solicitations (RS)
pass in  log (all) on axe0 \
     inet6 proto icmp6 \
     icmp6-type routersol

# Pass Router Advertisement (RA)
pass out log (all) on axe0 \
     inet6 proto icmp6 \
     icmp6-type routeradv
正しくグローバルIPv6アドレスが割り当てられているか確認したいときは、ping6 ipv6.google.comするなりlynxで開くなりなんなりと。