Conexão direta com cabo ethernet

1

Isto é para fins de "pesquisa" não pragmáticos - eu quero saber como isso deve funcionar, já que o meu palpite abaixo não funciona. Em outras palavras, eu não quero uma resposta que envolva /etc/network/interfaces ou qualquer outra coisa específica da distribuição, ou NetworkManager.

Por favor, não feche isto como uma duplicata de uma pergunta que forneça tais respostas.

Estou tentando conectar dois sistemas GNU / Linux com um cabo ethernet regular (não cross-over). Há rumores de que isso não deve ser um problema hoje em dia.

O que tentei fazer foi adicionar um IP privado para a interface nas duas máquinas:

ip addr add 10.0.0.1 dev eth0

E 10.0.0.2 na outra máquina. Nenhum deles está conectado a uma rede que possa ser identificada dessa maneira.

Depois adicionei rotas de um lado para o outro:

ip route add 10.0.0.2 via 10.0.0.1

E vice-versa. Posteriormente, a saída de ip addr e ip route parece estar correta (veja abaixo). De acordo com o comentário de John, eu também tentei isso sem adicionar nenhuma rota; Neste caso, o ping simplesmente expira.

Ambas as máquinas possuem iptables bem abertos; INPUT, OUTPUT e FORWARD são aceitos sem regras.

Mas isso é o que acontece quando tento um ping:

> ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable

Observe que é a interface local (10.0.0.1) que retorna isso.

Quais etapas adicionais são necessárias aqui e / ou onde eu errei?

A tabela de roteamento depois de usar ip route ... se parece com:

default via 192.168.0.1 dev wlan0 
10.0.0.2 via 10.0.0.1 dev eth0 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.19 

Sans ip route ... , parece o mesmo, mas sem a linha 2.

A saída do ethtool (ambos os NICs são hardware idêntico) se parece com:

ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbag
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

A saída de ip a para a NIC Ethernet se parece com:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:f5:4f:7a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fef5:4f7a/64 scope link 
       valid_lft forever preferred_lft forever
    
por goldilocks 23.10.2015 / 14:30

2 respostas

2

Como escrito nos comentários, você precisa corrigir a tabela de roteamento.

A sintaxe ip route add X via Y é usada para o tráfego de gateway, ou seja, se o tráfego para X deve ser enviado para o (mais tempo endereço externo) Y . Precisa haver uma rota extra como Y poderia ser alcançado. Se Y for seu próprio endereço de interface e você não resolve o problema de outra forma, você cria um loop e o roteamento não funciona.

O que você precisa é que o tráfego para o outro host seja enviado diretamente via a interface (não através de um gateway). Existem muitas possibilidades diferentes, dependendo da máscara de rede que você usa:

ip r add 10.0.0.2/32 dev eth0    # only 10.0.0.2 should go via eth0
...
ip r add 10.0.0.0/8 dev eth0     # 10.0.0.0 - 10.255.255.255 should go via eth0
    
por 23.10.2015 / 15:35
1

A questão aqui é que, por padrão, isso:

ip addr add 10.0.0.1 dev eth0

Defina uma máscara de sub-rede de /32 , o que significa que não pode haver nenhum outro nó na sub-rede e tentar definir uma rota com via não é nada.

Usando uma máscara explícita e sanitária:

ip addr add 10.0.0.1/24 dev eth0

resolve o problema; veja alternadamente a resposta de jofel.

    
por 23.10.2015 / 17:52