저는 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 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