中治@鳥取です。

http://euc.jp/network/pppoe.ja.html
http://www.yas.mu/network/fletsq/
http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c20021014%2e213300%2e74693221%2ehigaki%40tu%2echiba%2du%2eac%2ejp%3e

などを参考に、

・NTT西日本
・フレッツ・光プレミアム(+ひかり電話)
・OCN 光アクセス IP8 「フレッツ・光プレミアム」プラン
・FreeBSD 6.3-STABLE #56: Fri Jun 20 00:18:17 JST 2008

で、PPPoE複数セッション接続を試みていますが、

Warning: iface add: ioctl(SIOCAIFADDR, 10.183.50.71 -> 210.247.16.1): File 
exists
Error: ipcp_InterfaceUp: unable to set ip address

というエラーで、フレッツ・スクェアに接続できません。どうすればよいでしょう
か、という相談です。

<やったこと>

1. ppp.confにフレッツの項目を追加

default:
 set device PPPoE:vr0
 #set log Phase Chat LCP IPCP CCP tun command
 set log Phase Chat IPCP CCP tun command
 set speed sync
 set MRU 1438
 set MTU 1438
 set ctsrts off
 set timeout 0
 accept CHAP
 enable tcpmssfix
 add default HISADDR

ocnip8:
 accept lqr
 enable lqr
 set cd 5
 set dial
 set login
 set redial 0 0
 set authname OCNの認証ID
 set authkey OCNの認証パスワード
 set reconnect 5 5

flets:
 accept lqr
 enable lqr
 set cd 5
 set dial
 set login
 set redial 0 0
 set reconnect 5 5
 set authname 
[メールアドレス保護]
 set authkey flets

2. フレッツ網へのstatic routesをppp.linkupに追加

フレッツ接続ツールで直結したWindows XPでの情報によれば、NTT西日本では、
10.60.16.0/20や10.174.0.0/20への静的ルーティングが必要らしいです。

ocnip8:
 ! ifconfig tun0 delete
 ! ifconfig tun0 60.32.13.194 netmask 255.255.255.248 HISADDR
 add! default HISADDR

flets:
 add! 10.60.16.0/20 HISADDR
 add! 10.174.0.0/20 HISADDR

3. /etc/rc.confでppp起動を設定

最近は便利に書けるようになったようです。

$ grep ppp /etc/rc.conf
ppp_enable="YES"
ppp_profile="ocnip8 flets"
ppp_profile="ocnip8"
ppp_ocnip8_mode="ddial"
ppp_ocnip8_nat="NO"
ppp_ocnip8_unit="0"
ppp_flets_mode="ddial"
ppp_flets_nat="YES"
ppp_flets_unit="1"

4. pppでfletsにつないでみるとエラーになる

# ppp -unit1 flets
Working in interactive mode
Using interface: tun1
ppp ON www> dial
ppp ON www> 
Ppp ON www> 
PPp ON www> Warning: iface add: ioctl(SIOCAIFADDR, 10.183.50.71 -> 
210.247.16.1): File exists
Error: ipcp_InterfaceUp: unable to set ip address

</やったこと>

何度かの試行錯誤のうち set log allしておいたときの、/var/log/ppp.logには

IPCP: deflink: RecvConfigAck(7) state = Ack-Sent
IPCP:  IPADDR[6] 10.172.1.121
IPCP: deflink: State change Ack-Sent --> Opened
IPCP: deflink: LayerUp.
IPCP: myaddr 10.172.1.121 hisaddr = 210.247.16.1
ID0: 4 = socket(2, 2, 0)
ID0: -1 = ioctl(4, 2151704858, 0xbfbfdc10)
Warning: tun2: AIFADDR 10.172.1.121 -> 210.247.16.1 returns -1
Warning: iface add: ioctl(SIOCAIFADDR, 10.172.1.121 -> 210.247.16.1): File 
exists
Error: ipcp_InterfaceUp: unable to set ip address
IPCP: deflink: LayerDown: 10.172.1.121

というログが残っています。このときは、こちらに10.172.1.121が割り当てられた
ようです。

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1438
        inet 60.32.13.194 --> 210.247.16.1 netmask 0xfffffff8 
        Opened by PID 455
tun1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

ということで、210.247.16.1をtun0で使っているからだとは思うのですが、NTT東
日本での経験談しか見つからないのも気になります。

## NTT西日本で「1契約で複数のセッションを同時に張りたい」人が少ないから?

Googleでの検索結果
http://www.google.co.jp/search?q=Error%3A+ipcp_InterfaceUp%3A+unable+to+set+ip+address&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP:official&client=firefox
によれば、

POPTOP on a FreeBSD 7.0 machineで同様の問題を抱えている人
http://lists.freebsd.org/pipermail/freebsd-questions/2008-June/177329.html

同じPPPoEサーバに2つつなぐと後からのが失敗する人
http://www.mydatabasesupport.com/forums/bsd-freebsd-misc/345679-running-2-pppoe-connections-connecting-same-pppoe-server.html

などが見つかります。後者の人は

    So what I did is manually set parameters of ng1 with 'ifconfig', and
    set IP address of 'remote endpoint' to a another IP of ISPs
    network. And this worked fine.

ということで何とかしたらしいのですが、どんなPPPoEサーバなのか、どんなパラ
メータを設定したのかといった肝心な情報がないので、あまり参考にできません。

…などと書いているうちに、

mpdを使うとうまくいくこともある
http://lists.freebsd.org/pipermail/freebsd-questions/2007-March/144035.html
http://wiki.cyberleo.net/index.php/MultiHomedRouter

という体験談を見つけました。あとで試してみます。

どなたか、他に何かご存じのことやオススメの方法があれば教えてください。

また、/usr/sbin/pppじゃなくてmpdを使う場合、net/mpd{,4,5}ではどれがオスス
メですか?
-- 
NAKAJI Hiroyuki (中治 弘行)

メールによる返信