インターフェイス名は有効ですが、アドレスは無効です。

インターフェイス名は有効ですが、アドレスは無効です。

カールにインターフェイス名を渡すと、すべてが期待どおりに機能します。

$ curl --interface eth1 http://example.com
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
...

インターフェイスアドレスを渡すとタイムアウトします。

$ curl --interface 192.168.26.100 http://example.com
curl: (28) Failed to connect to example.com port 80 after 130248 ms: Couldn't connect to server

私が使用しているソフトウェアは、インターフェイス名ではなくアドレスへのバインディングのみをサポートしているため、インターフェイスアドレスを使用してバインドできない理由を特定しようとしています。

何が起こりますか?ip addr合計の出力は次のとおりですip route show

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d8:3a:dd:5c:9d:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 81459sec preferred_lft 81459sec
    inet6 fe80::a62e:3721:980e:beeb/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether ac:49:43:f8:eb:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.26.100/24 brd 192.168.26.255 scope global dynamic noprefixroute eth1
       valid_lft 81456sec preferred_lft 81456sec
    inet6 2001:14bb:ae:e82:f00e:38ba:2b2e:6f7c/64 scope global dynamic noprefixroute
       valid_lft 7192sec preferred_lft 3592sec
    inet6 fe80::2b6f:a6fc:d642:10e3/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
$ ip route show
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100
default via 192.168.26.1 dev eth1 proto dhcp src 192.168.26.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
192.168.26.0/24 dev eth1 proto kernel scope link src 192.168.26.100 metric 100

編集する:ip route get 192.168.26.100関連する質問を見た結果、IPアドレスを使用すると誤ったインターフェイス(eth1ではなくeth0)が返されるようです。

$ ip route get oif eth1 to 8.8.8.8
8.8.8.8 via 192.168.26.1 dev eth1 src 192.168.26.100 uid 1000
    cache

$ ip route get 192.168.26.100 to 8.8.8.8
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000
    cache

この問題をどのように解決できますか?

答え1

複数のインターフェイスがある場合、デフォルトの動作は技術的に呼び出されます。弱いホストモデル: 発信パケットの送信元 IP アドレスは発信インターフェイスの選択には影響しません。これにより、現代のルーターが無視する傾向がある非対称ルーティングが発生します。

システムがあなたの期待に応えるには、次のものが必要です。システム構成強力なホストモデル:これを行うには、より厳格なARPフィルタリングと高度なルーティングを設定して、各ネットワークインターフェイスに独自のルーティングテーブルとデフォルトゲートウェイを提供する必要があります。リンクされた質問では、必要な構成について詳しく説明します。

これ弱いホストモデルそして強力なホストモデル2つの代替IPスタック設計の原則があります。 Linuxはデフォルトで弱いホストモデルを使用します。その理由は、主にパケットあたりの作業が少なくて済むため、一般的なユースケースでより良いパフォーマンスが得られるためです。

関連情報