サーバー側に2つのネットワークカードがあります(eth0?)。 192.168.8.140とeth1? 192.168.8.142。クライアントは192.168.8.142にデータを送信し、iftop
eth1へのトラフィックが表示されると予想しましたが、表示されません。すべてのネットワークはeth0を通過しますが、これら2つのネットワークカードをどのようにテストしますか?
すべてのトラフィックがeth1ではなくeth0を通過するのはなぜですか?インターフェイスごとに1Gbit / sを取得すると予想されます。自分の設定や設定に何の問題がありますか?
仕える人
設定されている場合
eth0 Link encap:Ethernet HWaddr 00:00:00:19:26:B0
inet addr:192.168.8.140 Bcast:0.0.0.0 Mask:255.255.252.0
inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0
TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66881007720 (62.2 GiB) TX bytes:261053436 (248.9 MiB)
Memory:f7e00000-f7efffff
eth1 Link encap:Ethernet HWaddr 00:00:00:19:26:B1
inet addr:192.168.8.142 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: 0000::0000:0000:fe19:26b1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19358 errors:0 dropped:511 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1772275 (1.6 MiB) TX bytes:1068 (1.0 KiB)
Memory:f7c00000-f7cfffff
サービス端末
# Listen for incomming from 192.168.8.142
nc -v -v -n -k -l 192.168.8.142 8000 | pv > /dev/null
Listening on [192.168.8.142] (family 0, port 8000)
Connection from 192.168.8.135 58785 received!
顧客
# Send to 192.168.8.142
time yes | pv |nc -s 192.168.8.135 -4 -v -v -n 192.168.8.142 8000 >/dev/null
Connection to 192.168.8.142 8000 port [tcp/*] succeeded!
サービス端末
$ iftop -i eth0
interface: eth0
IP address is: 192.168.8.140
TX: cumm: 6.34MB peak: 2.31Mb rates: 2.15Mb 2.18Mb 2.11Mb
RX: 2.55GB 955Mb 874Mb 892Mb 872Mb
TOTAL: 2.56GB 958Mb 877Mb 895Mb 874Mb
$ iftop -i eth1
interface: eth1
IP address is: 192.168.8.142
TX: cumm: 0B peak: 0b rates: 0b 0b 0b
RX: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
TOTAL: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b0 brd ff:ff:ff:ff:ff:ff
$ ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b1 brd ff:ff:ff:ff:ff:ff
答え1
TCP / IPネットワークスタックには、強力なホストモデルと弱いホストモデルの2つの設計モデルがあります。強力なホスティングモデルと一致する動作を期待します。 Linuxは弱いホストモデルを使用するように設計されています。一般に、弱いホストモデルは、ルーティングコードの複雑さを減らし、より良いパフォーマンスを提供できるため、より一般的です。それ以外の場合、両方のコンソールモデルは異なる設計原則にすぎません。どちらも本質的に他のものよりも優れていません。
デフォルトでは、弱いホストモデルは、宛先IPアドレス(または宛先に直接接続できない場合は選択したゲートウェイ)に一致するルーティングテーブルにリストされている最初のインターフェイスからのトラフィックが送信されることを意味します。送信元 IP アドレスは考慮されません。。
これが基本的に、同じネットワークセグメントに2つのIPアドレスが必要な場合は、2つの別々の物理インターフェイスを使用することが一般的に推奨されない理由です。代わりに、インターフェイスには2つのIPアドレス(IPエイリアス:例:eth1 = 192.168.8.142とeth1:0 = 192.168.8.140)が割り当てられます。単一のインターフェイスが提供できるよりも多くの帯域幅が必要な場合は、2つ以上のインターフェイスを一緒に結合(または該当する場合は結合)し、結合/チームで両方のIPを実行します。
いくつかのsysctl設定を調整し、高度なルーティング機能を使用して各NICに別々のルーティングテーブルを設定することで、Linuxを強力なホストモデルシステムのように動作させることができます。しかし、これは非常に具体的な構成なので、実装する前に2回考えてみることをお勧めします。
回答を見るLinuxソースルーティング、強力なエンドシステムモデル/強力なホストモデル?本当に必要な場合。
答え2
考慮すべきもう1つの点は、eth1インターフェイスで設定されたサブネットマスクが255.255.255.255であることです。
これは、eth1インターフェイスがそのネットワークインターフェイスに他のデバイス(ホスト)なしで設定されていることを意味します。これは、192.168.8.142クライアントと通信できないことを意味します。
答え3
多くの検索の最後に見つかりました。netcatがIPに関連付けられた正しいインターフェイスを使用しないのはなぜですか?、同じ問題です。 @telcoMが言ったように、発信トラフィックは最初のインターフェイスに送信され、これが問題なので、この問題を解決する最も簡単な方法は次のとおりです。
ip route add default via 192.168.8.142 dev eth1 table 142
ip rule add from 192.168.8.142 table 142
パスはip route get 192.168.8.135 from 192.168.8.142
eth0 ではなく eth1 を返します。これにより、すべてが期待どおりに機能します。