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?