케이블이 eth0에 연결된 경우 wwan0을 통해 인터넷에 연결할 수 없습니다.

케이블이 eth0에 연결된 경우 wwan0을 통해 인터넷에 연결할 수 없습니다.

저는 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" 옵션을 선택해야 하는 경우 중 하나입니까? 아니면 두 기본 경로의 순서를 바꾸는 것으로 충분합니까?

카드는 다른 곳에서 데이터를 라우팅하지 않으며 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

또 다른 관련 문제는 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>

(이 두 줄의 타임스탬프는 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 wwan0World 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 을 사용 하지 않고 pingeth0 케이블을 통해 원격 끝점에 연결할 수 있습니다 .169.254.1.18.8.8.8ping -I N.N.N.N

편집 0

비활성화된 후 시작 시 자동으로 나타나지 않았기 eth0때문에 새 파일을 만들었습니다. 이제 모든 것이 시작 시 실행됩니다.connmansystemd.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

관련 정보