Por que o curl não funciona com a interface de rede não padrão no CentOS 6?

0

curl pode usar a interface de rede não padrão com sua opção --interface teoricamente. No entanto, na prática, não funciona. Eu tenho 2 interfaces de rede eth0 e eth1 . Cada um deles está conectado à Internet através do seu próprio roteador e usa o DHCP para configuração automática. Digamos que eth0 IP seja ip0 e eth1 IP seja ip1 . Então, eu defino eth0 como conexão padrão via /etc/sysconfig/network-scripts e executo o seguinte comando:

curl --url "http://ip-api.com/json"

Eu recebo uma resposta JSON, onde vejo que o IP externo real é ip0 . Agora eu defino eth1 em vez de eth0 como interface padrão, e o mesmo comando me retorna ip1 .

Agora defino eth0 como o IP padrão novamente e execute o seguinte comando:

curl --url "http://ip-api.com/json" --interface "eth0"

Sem problemas, retorna ip0 .

E finalmente:

curl --url "http://ip-api.com/json" --interface "eth1"

resulta no seguinte erro:

curl: (7) couldn't connect to host

Como podemos ver no teste anterior (em que eth1 era a interface padrão), eth1 não tem problemas. É uma conexão com fio muito confiável, portanto, o problema não está relacionado a nenhum problema de estabilidade de rede.

Minha tabela de roteamento segue:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.85.0    0.0.0.0         255.255.255.0   U     1      0        0 eth1
192.168.182.0   0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 eth2
0.0.0.0         192.168.182.2   0.0.0.0         UG    0      0        0 eth0
0.0.0.0         192.168.85.1    0.0.0.0         UG    1      0        0 eth1

Alguém pode explicar por que o curl não funciona com uma interface não padrão?

    
por Vitaliy 23.06.2017 / 08:51

1 resposta

3

As opções --interface são usadas para determinar qual endereço no sistema será usado como o IP de origem. Não muda magicamente nada sobre roteamento.

Um sistema típico só terá um único gateway padrão. Conectar duas portas usando duas redes diferentes usando apenas DHCP simplesmente não lhe dará um sistema multi-homed funcional. Uma das interfaces funcionará para se conectar à Internet e uma só funcionará para a sub-rede. Tentar ligar como você fez é enviar pacotes através do roteador errado.

No Linux, é possível fazer isso funcionar, mas são necessárias várias tabelas de rotas e regras para definir qual tabela usar. Veja este howto.

link

    
por 23.06.2017 / 09:22