sem internet através de wwan0 quando o cabo está conectado ao eth0

1

No meu cartão Beaglebone, eu uso o Angstrom Linux. Ele tem um cabo na porta ethernet (etho) e um dongle de modem USB 3G na porta USB cuja interface é chamada wwan0.

Na outra ponta do cabo ethernet cruzado há outro computador Linux rodando no Raspberry Pi.

Quando o cabo ethernet é desconectado, eu tenho acesso à internet, mas quando o cabo é conectado, o tráfego da internet é direcionado para a interface eth0.

A tabela de rotas do ip tem esta aparência:

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

Ao fazer     ping 8.8.8.8 isso falha, mas quando eu faço

ping -I wwan0 8.8.8.8

Isso funciona bem. Eu também posso pingar

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

que é a outra extremidade do cabo crossover ethernet e funciona. Então, como eu me certifico de que o tráfego da Internet apague na interface correta? Este é um dos casos em que a opção "Advanced router" deve ser selecionada em menuconfig antes de recompilar o kernel? Ou é suficiente trocar a ordem entre as duas rotas padrão?

Este cartão não direciona nenhum dado vindo de outro lugar, ele recebe dados em um barramento I2C e deve gravar esses dados em um servidor na Internet e outro servidor no outro lado do cabo crossover.

/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

Outro problema que pode estar relacionado é que o endereço IP não está configurado corretamente para o estático que eu configurei em / etc / network / interfaces acima, ele está na sub-rede correta 169.254.0.X, mas não é o que Eu configurada estaticamente.

EDIT 4

Se eu tentar excluir a rota padrão em EDIT 2

route del default gw 0.0.0.0 dev eth0

connman entra em ação e imediatamente a adiciona novamente, como visível via 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>

(os timestamps dessas duas linhas são idênticos, como visto com journalctl - follow)

EDIT 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

EDIT 2

Na minha opinião, a primeira linha parece suspeita.

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

EDIT 0 & EDITAR 1

De acordo com o comentário de FloHamself abaixo, a única sub-rede envolvida é 169.254.0.0/16 e uma começando com 192 é um erro de digitação. No entanto, alterar o endereço IP estático não impede que o IP estático seja alterado e o ping -I wwan0 ainda é a única maneira de alcançar a rede mundial de computadores.

    
por Adam.at.Epsilon 25.06.2015 / 16:15

1 resposta

0

Usando telnet para ler a saída de journalctl --follow , pude ver que connmand excluiu rotas sempre que tentei corrigir a tabela de roteamento. Então eu desabilitei usando systemctl :

systemctl disable connman.service

Também modifiquei /etc/network/interfaces para usar uma configuração ponto-a-ponto para 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

Em seguida, usando ifup eth0 , a interface apareceu. Agora posso ping o ponto de extremidade remoto do cabo eth0 169.254.1.1 e 8.8.8.8 sem usar ping -I N.N.N.N .

EDIT 0

O eth0 nunca apareceu automaticamente na inicialização depois de desativar o connman em systemd , então criei um novo arquivo .service . Então agora tudo funciona no momento da inicialização.

[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
    
por 06.08.2015 / 11:00