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