私のシステムには、eth0(接続されている場合と接続されていない場合があります)とppp0にモデム(常にアップまたはダウンしている場合があります)があります。両方のインターフェースが稼働していて、ppp0がデフォルトルートである場合、eth0のゲートウェイIPの実際のアドレスを判別する方法を見つけたいと思います。「netstat-rn」を試しましたが、この構成では出力は次のとおりです。
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
では、eth0のゲートウェイアドレスを決定するにはどうすればよいですか?上記の場合、実際のゲートウェイアドレスは192.168.98.1です。
コメント
- "とはeth0 'のゲートウェイアドレス"はどうあるべきですか?
- インターフェースは' tにはゲートウェイアドレスがありますが、netblockにはあります。ゲートウェイアドレスは、ネットワーク上のホスト宛てのパケットを転送する場所をカーネルに指示します。アドレスが特定のインターフェースに関連付けられている場合、そのインターフェースが使用されますが、アドレスはインターフェースから独立しています。
- したがって、私のアプリケーションでは、接続性がある場合、eth0をデフォルトゲートウェイにすることになっています。しかし、接続を確認するために、正常なサーバーへの一時的なルートを作成します。ただし、これを行うには、eth0 'のゲートウェイアドレスを知っている必要があります。では、どうすればこれを判断できますか?
- これを確認してください: stackoverflow.com/a/15973156/1422630
回答
eth0
がDHCPクライアントインターフェイスであると想定します。
1つのオプションは、 DHCPクライアントリースファイル dhcpd.leases
場所と名前はシステムによって異なります。一部のFedoraシステムでは、/var/lib/dhclient/
の下のファイルはリースファイルであり、興味深い文字列は次のようになります:
option routers 192.168.1.1;
funtooボックスで私のために働いた別のオプション:dhcpcd -U eth0
は、スクリプトでソースする準備ができた素敵なテーブルを印刷します
broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0
googleとマンページによると、dhcping
、dhclient -n
のような他のオプションがありますが、私のボックスでは失敗します。
回答
間違いは、netstat出力の情報をインターフェースに関連付けているということです。宛先アドレスではなく、宛先アドレスにゲートウェイを関連付けることができます。ネットワークを構成するときは、インターフェイスとゲートウェイを宛先アドレスのセットに関連付けます。したがって、質問する必要があるのは、宛先のゲートウェイは何ですか。 192.168.98 / 24? “私は、そのデバイスが存在するはずがないのではないかと思います。範囲内は、そのイーサネットにブリッジまたは直接接続されています。
デフォルトルートはppp0
経由であることに注意してください(最後の行はワイルドカードルートであり、マスクはすべてゼロであるため、実際にはビットは比較されないため、これらのアドレスのパケットはppp0
を介して送信されます。したがって、127.xx.xx.xx
または192.168.98.xx
にない宛先のパケットは、最終的にワイルドカードマスクと一致し、ppp0
。現在、これはポイントツーポイントプロトコルであるため、そのインターフェイスで送信されるすべてのパケットは、そのリンクで直接アドレス指定可能な唯一のデバイス、つまりそのもう一方の端に送信されます。ゲートウェイを指定する必要はありません。 すべてのパケットがそのインターフェースを介して送信されるため、インターネットの宛先がそのデバイスであるかどうかに関係なく、そのデバイスを介して送信されます。
現在:
、そのルーターのIPアドレスはほぼ確実に192.168.98.xxの範囲であり、少なくとも192.168.98.1ではない可能性が高く、そのルーターの電源が入っている場合ローカルネットワークに直接接続されていないすべてのルートのデフォルトルートをdefault via 192.168.98.1
にしたい場合は、インターネットに実際に接続します。新しい(「相対的な用語です。これは非常に長い間使用されています)」ip
コマンドを使用している場合は、ip route
を試してください。それで出力が得られる場合は、。それ以外の場合は、route help
を試してください。
したがって、eth0
インターフェースには ゲートウェイアドレス。ゲートウェイとして機能するイーサネットに接続された別のデバイスまたは複数のデバイスが存在する可能性があります。ネットワークには、(純粋に従来の)。その住所が必要だと言っている法律はなく、その存在を宣伝しなければならないと言っている法律もありません。いくつかの一般的な方法がありますが、最も一般的な方法は、ルーティングソフトウェアを実行しているボックスがdhcpサーバーも実行し、dhcpを話す人にその方法で自分自身について伝えることです。 MolbOrgの回答は、セットアップのかなり典型的なフレーバーを提供しますが、現時点で誰もが提案できることは、多かれ少なかれあなたの特定のものと一致する可能性が高いだけですネットワーク。
コメント
- 私の場合、ゲートウェイは.129で終わり、非常に紛らわしいです。usbテザリングが有効になっているときに決定されますが、その後、
route -n
(ゲートウェイが構成されていない(0.0.0.0)の後で(他のインターフェイスの場合)それを判別する方法がわかりません。編集:見つかりました! stackoverflow.com/a/15973156/1422630