web-dev-qa-db-ja.com

ケーブルがeth0に接続されている場合、wwan0を介したインターネットはありません

BeagleboneカードでAngstromLinuxを実行しています。イーサネットポート(etho)に1本のケーブルがあり、USBポートにUSB 3Gモデムドングルがあり、そのインターフェイスの名前はwwan0です。

クロスオーバーイーサネットケーブルのもう一方の端には、RaspberryPiで実行されている別のLinuxコンピューターがあります。

イーサネットケーブルを外すとインターネットにアクセスできますが、ケーブルを接続するとインターネットトラフィックはeth0インターフェイスに転送されます。

IPルートテーブルは次のようになります。

root@beaglebone:~# ip route
default dev eth0  scope link
default via 95.192.114.29 dev wwan0
95.192.114.28/30 dev wwan0  proto kernel  scope link  src 95.192.114.30
169.254.0.0/16 dev eth0  proto kernel  scope link  src 169.254.29.204

Ping 8.8.8.8を実行すると失敗しますが、実行すると失敗します

ping -I wwan0 8.8.8.8

これは正常に機能します。 pingもできます

ping 169.254.1.N # 'far' end of ethernet crossover cable

これはイーサネットクロスケーブルのもう一方の端であり、機能します。では、インターネットトラフィックが正しいインターフェイスで送信されるようにするにはどうすればよいですか?これは、カーネルを再コンパイルする前に、menuconfigで「Advancedrouter」オプションを選択する必要がある場合の1つですか?または、2つのデフォルトルート間で順序を入れ替えるだけで十分ですか?

このカードは、他の場所からのデータをルーティングせず、I2Cバスでデータを受信し、このデータをインターネット上の1つのサーバーと、クロスケーブルのもう一方の端にある別のサーバーに書き込むことになっています。

/etc/network/interfaces
iface eth0 inet static
    address 169.254.1.N+1 # 'near' end of crossover cable
    netmask 255.255.0.0
    gateway 169.254.1.2

allow-hotplug wwan0
iface wwan0 inet dhcp

関連する可能性のある別の問題は、IPアドレスが上記の/ etc/network/interfacesで設定した静的アドレスに正しく設定されていないことです。これは正しいサブネット169.254.0.Xにありますが、静的に構成したものではありません。 。

編集4

EDIT2でデフォルトルートを削除しようとすると

route del default gw 0.0.0.0 dev eth0

connmanはアクションにジャンプし、journalctlで表示されるように、すぐに再度追加します。

beaglebone connmand[853]: eth0 {del} route 0.0.0.0 gw 0.0.0.0 scope 0 <UNIVERSE>
beaglebone connmand[853]: eth0 {add} route 0.0.0.0 gw 0.0.0.0 scope 0 <UNIVERSE>

(これらの2行のタイムスタンプは、journalctl --followで表示したものと同じです)

編集3

root@beaglebone:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
    link/can
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 34:b1:f7:1b:02:86 brd ff:ff:ff:ff:ff:ff
    inet 169.254.252.60/16 brd 169.254.255.255 scope global eth0
4: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
    inet 78.78.88.67/29 scope global wwan0

編集2

私の意見では、最初の行は疑わしいように見えます。

netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 eth0
0.0.0.0         95.196.157.233  0.0.0.0         UG        0 0          0 wwan0
95.196.157.232  0.0.0.0         255.255.255.252 U         0 0          0 wwan0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

0を編集&1を編集

以下のFloHimselfのコメントによると、関係するサブネットは169.254.0.0/16のみであり、192で始まるサブネットはタイプミスです。ただし、静的IPアドレスを変更しても、静的IPの変更は妨げられず、ping -I wwan0がワールドワイドウェブに到達する唯一の方法です。

1
Adam.at.Epsilon

telnetを使用してjournalctl --followからの出力を読み取ることにより、ルーティングテーブルを修正しようとするたびにconnmandがルートを削除したことがわかりました。そこで、systemctlを使用して無効にしました。

systemctl disable connman.service

また、/etc/network/interfacesのポイントツーポイント構成を使用するようにeth0を変更しました。

auto eth0
iface eth0 inet static
        address 169.254.1.2
        netmask 255.255.0.0
        pointopoint 169.254.1.1
        gateway 169.254.1.1
        scope link

次に、ifup eth0を使用してインターフェイスが起動しました。これで、169.254.1.1を使用せずに、eth0ケーブルのリモートエンドポイント8.8.8.8ping -I N.N.N.Nの両方をpingできます。

編集0

connmansystemdを無効にした後、起動時にeth0が自動的に表示されなかったため、新しい.serviceファイルを作成しました。これで、すべてが起動時に機能します。

[Unit]
Description=Network interface eth0
Wants=network.target
Before=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "ifup eth0"
ExecStop=/bin/sh -c "ifdown eth0"

[Install]
WantedBy=multi-user.target
0
Adam.at.Epsilon