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 не работает с нестандартным интерфейсом?

1 ответ1

3

Параметры --interface используются для определения того, какой адрес в системе будет использоваться в качестве исходного IP-адреса. Это ничего не меняет в маршрутизации.

Типичная система будет иметь только один шлюз по умолчанию. Простое подключение двух портов к двум разным сетям с использованием только DHCP просто не даст вам работающей многодомной системы. Один из интерфейсов будет работать для подключения к Интернету, а другой - только для подсети. Попытка связать, как вы сделали, будет просто отправлять пакеты через неправильный маршрутизатор.

В Linux это возможно, но для этого требуется несколько таблиц маршрутов и правила, определяющие, какую таблицу использовать. Смотрите это как.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .