私はBeagleboneカードでAngstrom Linuxを実行しています。イーサネットポート(etho)にケーブルがあり、インターフェイス名がwwan0のUSBポートにUSB 3Gモデムドングルがあります。
クロスオーバーイーサネットケーブルのもう一方の端には、Raspberry Piで動作する別の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 169.254.1.N # 'far' end of ethernet crossover cable
これはイーサネットクロスオーバーケーブルのもう一方の端で動作します。それでは、インターネットトラフィックが正しいインターフェイスを通過するようにするにはどうすればよいですか?カーネルを再コンパイルする前に、menuconfigで「Advanced Router」オプションを選択する必要がある場合の1つですか?それとも、2つの基本パスの順序を変更するだけで十分ですか?
カードは他の場所からデータをルーティングせず、I2Cバスからデータを受信し、このデータをインターネット上のサーバーとクロスオーバーケーブルのもう一方の端にある別のサーバーに書き込む必要があります。
/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
もう1つの関連する問題は、IPアドレスが上記の/ etc / network / interfacesに設定された静的アドレスに正しく設定されておらず、正しいサブネット169.254.0.Xにあるが静的に設定したアドレスではないことです。
編集4
編集2でデフォルトパスを削除しようとすると
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
World Wide Webにアクセスする唯一の方法です。
答え1
telnet
読み取り出力を使用すると、ルーティングテーブルを変更しようとするたびに削除されたパスを表示できますjournalctl --follow
。connmand
だから、以下を使って無効にしますsystemctl
。
systemctl disable connman.service
/etc/network/interfaces
また、P2P設定を使用するように修正しました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
インターフェイスが表示されます。 .netを使用せずにping
eth0ケーブルを介してリモートエンドポイントに接続できるようになりました。169.254.1.1
8.8.8.8
ping -I N.N.N.N
編集0
無効になってから起動時に自動的に表示されなかったeth0
ため、新しいファイルを作成しました。これで、すべてが起動時に実行されます。connman
systemd
.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