web-dev-qa-db-ja.com

イーサネットケーブルとの直接接続

これは実用的な目的ではなく「研究」のためのものです-以下の私の推測はそうではないので、これがどのように機能するのか知りたいです。言い換えれば、/etc/network/interfacesやその他のディストリビューション固有のもの、またはNetworkManagerを含む回答は必要ありません。

そのような答えを提供する質問の複製としてこれを閉じないでください。

2つのGNU/Linuxシステムを通常の(クロスオーバーではない)イーサネットケーブルで接続しようとしています。噂によると、これは今日では問題にならないはずです。

私がやろうとしたのは、両方のマシンのインターフェイスにプライベートIPを追加することです。

ip addr add 10.0.0.1 dev eth0

そして、他のマシンでは10.0.0.2。どちらも、この方法で識別できるネットワークに接続されていません。

次に、前後にルートを追加しました。

ip route add 10.0.0.2 via 10.0.0.1

およびその逆。その後、ip addrip routeの出力は正しいようです(以下を参照)。ジョンのコメントによると、私もルートを追加せずにこれを試しました。この場合、pingは単にタイムアウトします。

どちらのマシンもiptablesを大きく開いています。 INPUT、OUTPUT、およびFORWARDは、ルールなしで受け入れられます。

しかし、これは私がpingを試みたときに起こることです:

> ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable

これを返すのはローカルインターフェイス(10.0.0.1)であることに注意してください。

ここで、および/またはどこで間違ったのか、どのような追加の手順が必要ですか?


ip route ...を使用した後のルーティングテーブルは次のようになります。

default via 192.168.0.1 dev wlan0 
10.0.0.2 via 10.0.0.1 dev eth0 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.19 

Sans ip route ...、同じように見えますが、2行目はありません。


Ethtoolからの出力(両方のNICは同一のハードウェアです)は次のようになります。

ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbag
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

イーサネットのip aからの出力NICは次のようになります:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:f5:4f:7a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fef5:4f7a/64 scope link 
       valid_lft forever preferred_lft forever
3
goldilocks

コメントに書かれているように、ルーティングテーブルを修正する必要があります。

構文ip route add X via Yはゲートウェイトラフィックに使用されます。つまり、Xへのトラフィックを(ほとんどの場合外部アドレス)Yに送信する必要がある場合です。 Yに到達するための追加のルートが必要です。 Yが独自のインターフェイスアドレスであり、それ以外の方法で問題を解決しない場合は、ループが作成され、ルーティングは機能しません。

必要なのは、他のホストへのトラフィックが(ゲートウェイ経由ではなく)インターフェース経由で直接送信されることです。使用するネットマスクに応じて、さまざまな可能性があります。

ip r add 10.0.0.2/32 dev eth0    # only 10.0.0.2 should go via eth0
...
ip r add 10.0.0.0/8 dev eth0     # 10.0.0.0 - 10.255.255.255 should go via eth0
4
jofel

ここでの問題は、デフォルトでこれです。

ip addr add 10.0.0.1 dev eth0

サブネットマスクを/32に設定します。これは、サブネット上に他のノードが存在できないことを意味し、viaを使用してそこにルートを設定しようとしても意味がありません。

明示的なサナーマスクの使用:

ip addr add 10.0.0.1/24 dev eth0

問題を解決します。代わりに、jofelの答えを参照してください。

2
goldilocks