これは実用的な目的ではなく「研究」のためのものです-以下の私の推測はそうではないので、これがどのように機能するのか知りたいです。言い換えれば、/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 addr
とip 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
コメントに書かれているように、ルーティングテーブルを修正する必要があります。
構文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
ここでの問題は、デフォルトでこれです。
ip addr add 10.0.0.1 dev eth0
サブネットマスクを/32
に設定します。これは、サブネット上に他のノードが存在できないことを意味し、via
を使用してそこにルートを設定しようとしても意味がありません。
明示的なサナーマスクの使用:
ip addr add 10.0.0.1/24 dev eth0
問題を解決します。代わりに、jofelの答えを参照してください。