web-dev-qa-db-ja.com

OS Xで特定のインターフェースを介してIP経路を指示する方法

私は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
35
Sean256

試してください:

route add -Host 54.81.143.201 -interface en0
31
drk.com.ar

他の人が指摘したように、これは実際には3つの問題です。

  1. あなたの無線インターフェースは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 /ルート/リンクを持っていることがよくあります)。

  2. それが終わったら、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

  3. 再起動すると、これが持続しないことがあります。あなたはそれを別に扱う必要があるでしょう。

3

このソリューションは最新の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コマンド出力から解析できることは確かですが、私はその=について怠惰すぎます)

2

-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に戻ります。

2
Nevin Williams
Sudo route -n add -net 54.81.143.201/32 192.168.15.1

OS Xのrouteコマンドはここに文書化されています。 -ifscopeパラメーターとその値を使用すると、インターフェースにバインドされた経路を指定できます。

しかし、これはあなたが望むものではありません。 IP範囲が一意になるようにネットワークを修正する必要があります。それ以外に、インターフェースメトリクス(別名優先順位)は、他の点では同等の機会のあるオプションから選択されるインターフェースに影響します。

1
Daniel B