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


curl pode usar interface de rede não-padrão com sua --interface opção teoricamente. No entanto, na prática, não funciona. 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 eth0 IP é ip0 e eth1 IP é ip1. Então, eu defini eth0 como conexão padrão via /etc/sysconfig/network-scripts e execute o seguinte comando:

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

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

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

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

Sem problemas, ele retorna ip0.

E finalmente:

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

resulta no seguinte erro:

curl: (7) não pôde se conectar ao host

Como podemos ver no teste anterior (onde 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 da 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 interface não padrão?


0


origem


Por favor, mostre a tabela de roteamento - Gerald Schneider


Respostas:


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 vincular como você fez é enviar apenas pacotes através do roteador errado.

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

http://lartc.org/howto/lartc.rpdb.html


3



Posso confirmar que os comandos acima começaram a funcionar como esperado depois que adicionei duas tabelas de roteamento personalizadas (uma por interface de rede) e um gateway padrão correto específico para cada tabela personalizada. - Vitaliy