私はMacにいて、私のWifi接続の特定のゲートウェイを通して特定のアドレスをルーティングしようとしています。
私が使っている:
route add -Host 54.81.143.201 192.168.15.1
時々これはうまくいくでしょう、そうでなければそれは文句を言わない。私が見つけたのは、それが選ぶインターフェースが毎回違うということです。動作させるにはen0
である必要があります
netstat -nr
が動作しない場合に出力されます。
54.81.143.201 192.168.15.1 UGHS 1 89 en5
これはうまくいくときです。(note en0)
54.81.143.201 192.168.15.1 UGHS 0 1 en
なぜ私はこれをしているのですか?私たちの会社はHipChatが動作しないプロキシを持っているからです。だから私はまだ私の作品のイーサネット上にいる間、私はオープンなwifiネットワークを通してヒップチャットトラフィックをルーティングしています。
編集:
私はまた、インターフェースだけを使ってエントリーを追加してみました
route add -Host 54.81.143.201 -interface en0
54.81.143.201 78:31:c1:c7:52:74 UHS 0 2 en0
HipChatは接続に失敗します。
編集2:誰かが私の全体のルーティングテーブルを要求しました、ここでそれは今日です。 54.81.143.201はen0ではなくen3にバインドされています。
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.7.90.1 UGSc 31 6 en3
10.7.90/24 link#4 UCS 4 0 en3
10.7.90.1 0:23:ac:3d:db:c2 UHLWIir 16 0 en3 1200
10.7.90.44 40:6c:8f:19:4a:bb UHLWI 0 3 en3 946
10.7.90.63 127.0.0.1 UHS 0 0 lo0
54.81.143.201 192.168.15.1 UGHS 0 0 en3
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 3 209 lo0
169.254 link#4 UCS 1 0 en3
169.254.255.255 0:23:ac:3d:db:c2 UHLSW 0 0 en3
試してください:
route add -Host 54.81.143.201 -interface en0
他の人が指摘したように、これは実際には3つの問題です。
あなたの無線インターフェースはen0、en3、en5の間で変化しているようです。
私のMacBook Airでは、en0は常に無線です。 Thunderbolt-to-Ethernetは常にen3、USB-to-Ethernetは常にen5です。ただし、Macの別のポートにアダプタを接続すると、NICの名前が変わります。まずこれを解決する必要があります。あなたのワイヤレスが常に同じ名前を持っていることを確認してください。それ以外の場合、static routeコマンドを入力したときに、NICがen0
の場所にプラグインされていないと、コマンドは(明らかに)「アドレスエラー」(物理アドレスにリンクがない)で失敗します。
同様に、アダプタが常に同じSSIDに接続していることを確認してください。ゲートウェイアドレスは明らかにサブネットに対して有効である必要があり、異なるWiFiネットワークは異なるサブネットを持ちます。これは別の種類のエラーを引き起こす可能性があります。
ワイヤレスがあなたの唯一のネットワーク接続であるかどうかあなたは指定しませんでした。上記のことを考えれば、私はそうではないと思います…? VMwareまたはParallelsによるこれと仮想ネットワーキングでは、さらに複雑さが増す可能性があります。 (たとえば、接続されている両方のネットワークが同じIPスペースを使用している場合...仮想マシンはブリッジされていて、独自のIP /ルート/リンクを持っていることがよくあります)。
それが終わったら、Sudo route add -Host 54.81.143.201 -iface en0
またはSudo ipfw
を試してください。アダプタの名前がわからない場合は、代わりに次のようにMACアドレスを指定できます。Sudo route add -Host 54.81.143.201 -link 14:10:9f:e7:fd:0a
関連: https://discussions.Apple.com/thread/5049994?searchText=policy%20route
再起動すると、これが持続しないことがあります。あなたはそれを別に扱う必要があるでしょう。
このソリューションは最新のMacOS 10.12(Sierra)で動作します。これが の要旨 です。
#!/bin/bash
# NOTE: wifi network interface is: en1
wifi_router=192.168.200.1
wifi_address=en1:ec.35.86.4f.00.cc
TOADDR=`ifconfig en1 inet | sed -nl 's/\w*inet \([^ ]*\).*/\1/p'`
TO=`echo -n ${TOADDR//[[:space:]]}`
echo "ADDING ROUTE TO $1 VIA en1 (wi-fi): $TO"
route -n add -Host $1 $wifi_router -ifp $wifi_address -ifa $TO -static
echo ""
echo "ROUTE ADDED:"
route get $1
このように使用してください:
> Sudo ./route_wifi.sh IP_ADDRESS
これは、wifiインターフェースがen1であると想定しています。
wifi_routerおよびwifi_address変数に正しい値を入れることを忘れないでください。 wifi_address形式。ネットワークインタフェース名': 'とのインターフェイスMACアドレス。'区切り文字。必要な情報の大部分はifconfigコマンド出力から解析できることは確かですが、私はその=について怠惰すぎます)
-link
オプションを使用してMACアドレスを指定することで、インターフェースを介した経路を追加することができました。
route add -Host 54.81.143.201 -link [mac addr of 192.168.15.1 on en0]
それは54.81.143.201
へのトラフィックを適切なインターフェースに送ります。
あなたは2つの別々の192.168.15.*
ホストアドレスが割り当てられていますか?さもなければ、どちらかのインターフェイスからトラフィックを送信するかもしれませんがトラフィックはパケットが持っているソースIPに戻ります。
Sudo route -n add -net 54.81.143.201/32 192.168.15.1
OS Xのroute
コマンドはここに文書化されています。 -ifscope
パラメーターとその値を使用すると、インターフェースにバインドされた経路を指定できます。
しかし、これはあなたが望むものではありません。 IP範囲が一意になるようにネットワークを修正する必要があります。それ以外に、インターフェースメトリクス(別名優先順位)は、他の点では同等の機会のあるオプションから選択されるインターフェースに影響します。