curl
теоретически может использовать сетевой интерфейс не по умолчанию с опцией --interface
. Однако на практике это не работает.
У меня 2 сетевых интерфейса eth0
и eth1
. Каждый из них подключен к Интернету через собственный маршрутизатор и использует DHCP для автоматической настройки. Допустим, eth0
IP - это ip0
а eth1
IP - это ip1
.
Итак, я установил eth0
как соединение по умолчанию через /etc/sysconfig/network-scripts
и выполнил следующую команду:
curl --url "http://ip-api.com/json"
Я получаю JSON-ответ, где вижу, что фактическим внешним IP является ip0
. Теперь я устанавливаю eth1
вместо eth0
качестве интерфейса по умолчанию, и эта же команда возвращает мне ip1
.
Теперь я снова установил eth0
как IP-адрес по умолчанию и выполнил следующую команду:
curl --url "http://ip-api.com/json" --interface "eth0"
Нет проблем, возвращает ip0
.
И наконец:
curl --url "http://ip-api.com/json" --interface "eth1"
приводит к следующей ошибке:
curl: (7) не удалось подключиться к хосту
Как мы видим из предыдущего теста (где eth1
был интерфейсом по умолчанию), eth1
не имеет проблем. На самом деле это очень надежное проводное соединение, поэтому проблема не связана с проблемами стабильности сети.
Моя таблица маршрутизации выглядит следующим образом:
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
Кто-нибудь может объяснить, почему curl не работает с нестандартным интерфейсом?