pppを有効にすると全部つながらない

環境

VM環境

  • Fedora release 16 (Verne)
  • ppp-2.4.5
  • rp-pppoe-3.11

ホスト側:
 192.168.211.1
ゲスト側:
 (eth0)192.168.211.138
 (eth1)-

これとは別に、もう一台別VMCentOSでppp-serverを稼動してますが、こっちは割愛。

インストール

適当に。

設定

adsl-setupとかでやってもいいし、/etc/sysconfig/network-script/ifcfg-ppp0を作るのもいい。
多少変えてるけど殆どそのまま。まあとにかくETH=eth1ってこと。

USERCTL=no
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=no
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=MASQUERADE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=0
DEFROUTE=yes
SYNCHRONOUS=no
ETH=eth1
PROVIDER=DSLppp0
USER=user01
PEERDNS=no
DEMAND=no

起動

ipアドレスがあってはいけないらしい。

# ip addr flush dev eth1
# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F4:91:AE
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3725 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1300 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:319576 (312.0 KiB)  TX bytes:59327 (57.9 KiB)

いよいよ

# ifup ppp0

すると、ssh接続していたら切れた。

しょうがないので直接入って確認すると、こっちは問題なくつながってる。

# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.67.15.18  P-t-P:10.0.0.1  Mask:255.255.255.255
          POINTOPOINT NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 b)  TX bytes:30 (30.0 b)

が、ping応答なし。何も帰ってこないし、タイムアウトにもならない(?)。

# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.

さらに、ホストマシンも応答なし。

# ping 192.168.211.1
PING 192.168.211.1 (192.168.211.1) 56(84) bytes of data.
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F4:91:A4
          inet addr:192.168.211.138  Bcast:192.168.211.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef4:91a4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10750 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6574 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3761754 (3.5 MiB)  TX bytes:951351 (929.0 KiB)

なんとさらに。

# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.

仕方なく一旦切ってみる。

# ifdown ppp0

状況変わらず。

# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.

最終的に再起動で元に戻った。が、試行錯誤するうちに、なぜかiptablesを再起動すると元に戻ることを発見。

# systemctl restart iptables.service
# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_req=1 ttl=64 time=0.082 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_req=2 ttl=64 time=0.057 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_req=3 ttl=64 time=0.056 ms
^C

こっちもOK

# ping -c 4 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=1.49 ms
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=0.733 ms
64 bytes from 10.0.0.1: icmp_req=3 ttl=64 time=0.748 ms
64 bytes from 10.0.0.1: icmp_req=4 ttl=64 time=0.728 ms

--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.728/0.927/1.499/0.330 ms

わかっていること

起動時に何か書き換えるのか?と思って。

  • ifconfig eth0の結果は、どっちの状態でも一緒
  • /etc/resolv.confも一緒。
  • netstatの出力も一緒
  • /proc/ioportsも一緒
  • ip addrの出力も一緒
  • (他にも色々比較したけど覚えてない...)
  • 現象発生時にはrouteコマンドの表示に時間がかかる(内容は当然違うが)

とりあえずの対処

あきらめて放置してました。2ヶ月ほど。

本当の対処

/sbin/pppoe-connectの、

case "$FIREWALL" in
    STANDALONE)
        . /etc/ppp/firewall-standalone
        ;;
    MASQUERADE)
        . /etc/ppp/firewall-masq
        ;;
esac

らへんをコメントアウトしちゃうと動きます。

補足

/etc/ppp/firewall-standaloneとかfirewall-masqって何だよ。とか、$FIREWALLが何者でなんか指定してるんだっけ。とか、ぜんぜん調べてません。
少なくとも、別の環境のCentOS(バージョン忘れた)では、問題なく動いてたので、Fedoraが原因か、ちょっと古いOSってのが原因か、その辺だと思います。

2014/2/5 追記

自分の記事をちゃんと読めと言う感じですが、わざわざscriptを書き換えなくても、
ifcfg-ppp0の中にある

FIREWALL=MASQUERADE

この行を消すとかすれば、問題ありません。
この機能がなんで使えないのかは...分かりません。