ゲートウェイ(次ホップ)を指定しないWindows静的ルート


15

次のシナリオがあります。

コンピューターA 198.51.100.8:、ネットマスク255.255.255.0
コンピューターB 203.0.113.9:、ネットマスク255.255.255.0
両方のコンピューターが同じLANセグメントにあります。いずれの場合もデフォルトゲートウェイは指定されません。

これら2台のコンピューターが相互に通信できるように、次のように2つの静的ルートを追加しました。

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

ただし、ゲートウェイIPアドレスを指定するのではなく、ネットワークインターフェイスを指定して静的ルートを追加することをお勧めします

Linuxでは、次のようなコマンドを使用してこれを行うことができます。

ip route add 203.0.113.9 dev eth0

FreeBSDでも同様です:

route add 203.0.113.9/32 -iface fxp0 -cloning

ただし、Windowsでこれを行う方法がわかりません。理想的には次のようなことをしたいです:

route add 203.0.113.9 mask 255.255.255.255 if 2

しかし、それは単にrouteコマンドの使用法を出力するだけで、これは私が間違っていることを教えてくれます。私もnetsh教えてみました:

> netsh routing ip add persistentroute 203.0.113.9 255.255.255.255 "Local Area Connection"
Specify the next-hop for non point-to-point interfaces.

考えや提案はありますか?


更新:最初にこの質問を投稿したとき、Windows XPを使用していました。しかし、私はそれを言及することを怠った。

Grizlyの元の答えはそのまま残します。これは私の元の質問に正しいものです。ただし、XP / 2003よりも新しいバージョンのWindowsを使用している場合は、他の回答のいずれかを試してください。

回答:


7

これはWindowsでは不可能な場合があります

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx

引用:ローカルに接続されたサブネットルートの場合、ゲートウェイアドレスは、サブネットに接続されているインターフェイスに割り当てられたIPアドレスです。


こんにちはGrizly-回答ありがとうございます!提案された両方のコマンドを試しましたが、「ルートの追加に失敗しました。インターフェイスインデックスが間違っているか、ゲートウェイがインターフェイスと同じネットワーク上にありません。マシンのIPアドレステーブルを確認してください。」マシンには2つのインターフェイス、0x1(MS TCP Loopbackインターフェイス)と0x2(Intel(R)PRO / 1000 MTネットワーク接続)しかありません。他に考えはありますか?
分裂

「メトリック1が2の場合」の部分を無視してください。-pなしでもテストするのが最適です。(それが永続的になります)
Grizly

「metric 1 if 2」部分なしで同じ結果が得られます。
分裂

ああ、私の悪い点は、ゲートウェイがインターフェースのIPであるようです。答えが更新されました。
グリズリー

そう、これは私がすでにやっていることであり、避けたいことでした。とにかくありがとう。
分裂

21

Windowsでは、0.0.0.0ゲートウェイとして渡すことにより、インターフェイスを知らなくても、インターフェイスに基づいてルートを追加できます。

これにより、次のようになります。

route add <IPtoRoute> mask <MaskOfTheIp> 0.0.0.0 IF <InterfaceNumber>

route add 203.0.113.9 mask 255.255.255.255 0.0.0.0 IF 2

2
これをWindows 7 x64で試しました。できます!私のコマンド:route ADD 176.31.111.111 0.0.0.0 IF 25それは返さOK!期待どおりに新しいエントリがルーティングテーブルに登場
ドミトリー

6

Juniper Junos Pulse VPNクライアントを使用して、Windows 7 Enterpriseでも同じ結果を得ました。
考えられるすべてのIPv4アドレスをキャプチャし、これらをダイヤルアップ接続にルーティングしたため、これに問題がありました。

Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          1.0.0.0        255.0.0.0         On-link       XX.XX.XX.XX     11
          2.0.0.0        254.0.0.0         On-link       XX.XX.XX.XX     11
          4.0.0.0        252.0.0.0         On-link       XX.XX.XX.XX     11
          8.0.0.0        248.0.0.0         On-link       XX.XX.XX.XX     11
         16.0.0.0        240.0.0.0         On-link       XX.XX.XX.XX     11
         32.0.0.0        224.0.0.0         On-link       XX.XX.XX.XX     11
         64.0.0.0        192.0.0.0         On-link       XX.XX.XX.XX     11
        128.0.0.0        128.0.0.0         On-link       XX.XX.XX.XX     11

すべてのトラフィックがVPNを通過することを望まなかったため、だれかがそれを必要とする場合に備えて、これらのルートを削除し、ゲートウェイを指定せずに必要な1つ(10.0.0.0)のみをインストールする小さなcmdファイルを作成しました、適切なインターフェイスを指定します。
これを使用して、インターフェイスの番号を動的に取得できます。

@rem Get the interface number
set IF=
for /f "tokens=1,8 delims=. " %%A in ('route print') do @if /i "%%B" equ "Juniper" set IF=%%A
@rem If interface is not found, terminate quietly
if not defined IF exit /b
for %%A in (1 2 4 8 16 32 64 128) do @route delete %%A.0.0.0
route add 10.0.0.0 mask 255.0.0.0 0.0.0.0 IF %IF%

1
VPN接続のIPプロパティセクションで「強制トンネリング」を無効にすることができます。
奇妙なウォーカー14

5

10進数のインターフェイス番号はで表示されroute printます。の下の出力の上部を見てください Interface List

別の方法はarp -a、16進数を使用してメモすることです。例:

C:\>arp -a

Interface: 192.168.1.28 --- 0xc  
  Internet Address      Physical Address      Type
<snip>

if引数の後に両方とも受け入れられますroute.exe。例:

route ADD <NET-ID> MASK <mask> <GW-address or 0.0.0.0 for on-link> IF 0xc -P

arp -aNICを識別する方が簡単なので、私は好みです。

他の多くの方法がありますが、これは最も簡単です。


0

永続的なテーブルではゲートウェイを省略できません。一部の人々は、そこにインターフェイスカードIP(ユーザー側)を置くことを提案しますが、これはWindows XPでは受け入れられました。しかし、それはもう有効ではありません。この場合、OSは、少なくともキャッシュが読み込まれるまで、すべてのネットワークインターフェイスをノックし続けます。それは良い動作ではなく、空のルーティングテーブルと違いはありません。

ゲートウェイとして宛先IPを配置すると、少なくともWindows 10で問題が解決することがわかりました。しかし、現時点では100.1%の真実であることを確認する統計情報はほとんどありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.