web-dev-qa-db-ja.com

ゲートウェイを指定しないWindowsスタティックルート(ネクストホップ)

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

コンピューター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を使用していました。しかし、私はそれについて言及するのを怠りました。

元の質問には正しいので、グリズリーの元の回答はそのままにしておきます。ただし、XP/2003よりも新しいバージョンのWindowsを使用している場合は、他の回答の1つを試してみてください。

15
fission

これはWindowsでは不可能かもしれません

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

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

7
Grizly

ウィンドウでは、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
21
domi.vds

ジュニパーの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を通過することを望んでいないため、誰かがそれを必要とする場合に備えて、これらのルートを削除するための小さなcmdファイルを作成し、ゲートウェイを指定せずに必要なもののみ(10.0.0.0)をインストールしました、適切なインターフェースを指定する。
これを使用して、インターフェイスの番号を動的に取得できます。

@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%
6
Eelco L.

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

もう1つの方法は、arp -aを使用して16進数を書き留めることです。例:

C:\>arp -a

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

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

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

NICを識別しやすいため、arp -aを使用します。

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

6
Eggie

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

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

0
Asdf