次のシナリオがあります。
コンピューター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つを試してみてください。
これはWindowsでは不可能かもしれません
http://www.Microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx
引用:ローカルに接続されたサブネットルートの場合、ゲートウェイアドレスは、サブネットに接続されたインターフェイスに割り当てられたIPアドレスです。
ウィンドウでは、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
ジュニパーの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%
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.exe
のif
引数の後に受け入れられます。例:
route ADD <NET-ID> MASK <mask> <GW-address or 0.0.0.0 for on-link> IF 0xc -P
NICを識別しやすいため、arp -a
を使用します。
他にも多数の方法がありますが、これが最も簡単です。
パーマネントテーブルではゲートウェイを省略できません。一部の人々はそこにインターフェースカードIP(ユーザー側)を置くことを提案します、それはWindows XPでは受け入れられました。しかし、それはもはや有効ではありません。この場合、少なくともキャッシュが読み込まれるまで、OSはすべてのネットワークインターフェイスをノックし続けます。これは適切な動作ではなく、ルーティングテーブルが空であっても違いはありません。
ゲートウェイとして宛先IPを設定することで、少なくともWindows 10で問題が解決することを発見しました。しかし、現時点で100.1%の真実であることを確認する統計はほとんどありません。