静的ルーティング

以前にも質問させていただいたのですが、やはり解決しないので再度質問します。
AirMacと有線LANの両方を使ってMacから2つのネットワーク接続したいと思っています。
有線LANを有線に設定し、インターネットに接続します。(つまりデフォルトのルータはこちらのネットワーク)AirMacの方が社内のイントラネットに接続されていて、各ルータのアドレス、サブネットがわかっているのでこちらの静的ルーティングを記述することになります。
netstatで調べると有線がen0、AirMacがen1になっています。
ログインした状態でターミナルから「route add」コマンドを入力すると正しくルーティングテーブルができるのですが、rc.commonファイルに追記するとen0の方にアドレスが追加されてしまいます。
起動のたびに、入力するわけにはいかないので、なんとか起動時に静的ルーティングのテーブルを作る方法をご存知の方、ご指導ください。

投稿日 2005/03/17 19:30

返信: 32

2005/03/06 10:27 Community User への返信

> が、ユーザーにはちょっと徹底しにくいかも・・・
って、ルーティングの設定をしなければならない複数のユーザがいるということですか?
一般ユーザが複数のルーティングを設定しなければ使えないなんて、そもそもネットワークの設計がよくないように見えます。
複数のルーティングをしなければ使えないなんていう状況は、通常はサーバだけと思うのですが。クライアントマシンでそうしたいときはありますけど、常時それが求められるようならネットワークの設計に問題があると思います。
最初の点に戻るのですが、なぜ、インターフェースを指定しなければいけないのか理解に苦しみます。通常、複数のルーティングを設定するときは、ネットワークアドレスから自ずとインターフェースは決まりますから、インターフェースの指定などしなくてもうまくいきますけど。逆に、指定しないとうまくいかないように見えるとするなら、指定してもうまくいかないと思います。
# わたしは PS には触ったこともありません。

2005/03/18 09:58 Community User への返信

シェルで起動する分には動くことがわかっているのですね?
私なら、AppleScriptでdo shell scriptを埋め込んだスクリプトアプリケーションを作り、Dockに入れてしまうか、環境設定:アカウント:起動項目に入れてしまうという方法をとります。
set theScript to "route add xxx.xxx.xxx.0/24 ooo.ooo.ooo.ooo"
-- do shell script theScript with administrator privileges
do shell script theScript password "パスワード" with administrator privileges
do shell script "sudo -k"
スクリプトエディタでこれをアプリケーションとして保存すればOKです。

2005/03/18 10:27 Community User への返信

> AppleScriptでdo shell scriptを埋め込んだスクリプトアプリケーション
そんなことしなくても、shell script のままファンイダーから直接(ターミナルを自動的に立ち上げて)実行できます。こちら
これを起動項目にいれておくというのもありですね。

2005/03/18 14:33 Community User への返信

これはこれでもいいのですが、
・ターミナルが立ち上がりっぱなしになるのと、
・実行したコマンドのシェルが終了してしまう
・なのに実行ウィンドウが残ったままになります
ので、個人的にはScript Applicationのほうが好きですね。

2005/03/22 13:44 Community User への返信

返事遅くなって申し訳ありません。
さまざまなご意見ありがとうございます。
お二人共のご意見は、ログイン後の静的ルーティングの追加ですね。申し訳ありません、説明不足で、実は、このMac、Windows2003サーバーにログオンします。(MacOSのログオン画面のユーザーでWindowsサーバーにログオンします。)ですので、ログオン時に静的ルーティングできないとサーバーにログオンできなくなってしまいます。
OSのログオン前に静的ルーティングを追加するのは、方法はないでしょうか?(私の勝手な予想なのですが、rc.commonでうまく行かないのは、en0とen1の初期化が終わる前にrc.commonの実行が行われてしまい、正常なルーティングテーブルができていないのではないかと考えています。)
よろしくお願いします。

2005/03/22 15:44 Community User への返信

> お二人共のご意見は、ログイン後の静的ルーティングの追加
私の最初のコメントは OSX の GUI で設定するアップルお薦めの方法なんですが、それではいけないのですか?
rc.common は使わない方がいいと思います。いろいろなアップデートで変更されますので、アップデートして再起動した途端、接続できなくなってしまう、ということになりかねません。最悪、起動不能になることもありえます。

2005/03/22 20:39 Community User への返信

お二人ともありがとうございます。
はにさんの方法は、既に行っています。(内容を取り違えていなければ・・・)はにさんの方法は、2つのインターフェースを有効にする方法ですよね。もちろん2つのネットワークに接続するのですから、当然2つのインタフェースを有効にしています。片方をインターネットに、もう一方の方にルーターを経由してWindowsサーバーに接続しています。インタ−ネットはアクセスするサーバーのアドレスを限定することはできないため、デフォルト(優先するインターフェース)にしています。
Windowsサーバーは社内のサーバーですので、当然アドレスがわかっているため、サーバーに接続するためにルーターのアドレスをインターフェースに登録(静的ルーティングテーブル登録)をしなければ通信できません。(実験しました。ターミナルでルーティングテーブルに登録しなければ、pingが届きません。)
MyCometG3さんの方法は、AppleScriptの分ですよね!それを/Library/Preferences/loginwindow.plistに登録するということですね。まだやってみていませんが、これは、ログイン時に実行するアプリケーションを登録するファイルではないのですか?ログインするサーバーが、ルーターの先にありますので、ログインする前にルーティングテーブルに登録できなければなりません。システム環境設定のアカウントのログインオプションで自動アカウントをオフにし、ログイン時の表示を「名前とパスワード」にしています。この状態でログオフした状態で、静的ルーティングできないと困ります。(または再起動)このログイン画面でWindowsサーバーに登録されているユーザーを入力しますので、この状態でルーティングできる必要があります。(Macのアカウントには登録されていないユーザーです。)
何か良き方法があればアドバイスください。
P.S.はにさんはPS2をよく使ってらっしゃいますか?もしそうなら、もしかして「みんはに」さんでしょうか?

2005/03/23 06:13 Community User への返信

〜/Library/Preferences/loginwindow.plistではありません。
/Library/Preferences/loginwindow.plistです。
このファイルは全ユーザ共通です。ログイン時に実行されます。
ルーティングテーブルはログアウトしても解除されませんので、ログインは一旦行い、ログアウトして再度ログインするだけでいいかと思います。
しかし、確かに面倒ですね...うまい方法が思いつきません...
強引な方法としては、cron起動+シェルスクリプトによるインターフェースのモニタ+ルーティング割り付けという技もありますが...
いじるとしたら、/System/Library/StartupItems/Network/Networkあたりでしょうか?
これ以上は実環境でないとテスト出来ないですね..l.

2005/03/23 18:09 Community User への返信

>ルーティングテーブルはログアウトしても解除されませんので、ログインは一旦行い、ログアウトして再度ログインするだけでいいかと思います。
これは、一つの回答かもしれません、が、ユーザーにはちょっと徹底しにくいかも・・・
>強引な方法としては、cron起動+シェルスクリプトによるインターフェースのモニタ+ルーティング割り付け
うっ、これはもう手に負えません。もっとUNIX関連の勉強しなければ・・・
>/System/Library/StartupItems/Network/Network
も見てみましたが、何のことか私には皆目見当がつきません。
やりたいことは単純なのになかなかうまく行かないものですね。
やはりMacでちょっと凝ったことは難しいのでしょうか・・・元はと言えば、正しいインターフェースに正しいルーターのアドレスを登録したいだけなのに・・・
ありがとうございました。

2005/03/25 17:34 Community User への返信

ルーティングの設定なんて、全然単純じゃないです。
ちょっとどころか、かなり凝ってます。
ネットワークの設計として、正しいインターフェースや正しいルータのアドレスなんて意識しなくてもいいようにネットワーク構築するのが筋ですから。
例えば、DHCPで取得できるようにするとか、ルータがルーティング情報を元に適切なルーティングを判断して処理できるようにするとか。
社内のイントラネットには個人情報の保護に関する法律の対象と成る個人情報が有るかもしれませんので、安直にインターネットに接続して、マッキントッシュを経由する事で侵入される危険のある行為は慎むべきではないでしょうか。

2005/03/26 13:20 Community User への返信

こういうの書いてよいのかわからないのですが、興味があって調べてみたら、
こんなページに行き当たりました。
たぶん、ご希望のことだと思います。
Static routingの必要な環境というのは「結構ある」ということですね。
http://www.0-i-0.com/bbs/c-board.cgi?cmd=ntr;tree=3322;id=

2005/03/26 21:01 Community User への返信

様々な意見ありがとうございます。
ネットワークの設計が出てきましたので、説明させていただきます。
当社のポリシーとして、インターネット接続とイントラネット(社内ネットワーク)は、接続しないというポリシーで運用しています。利便性は下がりますが、ユーザーの操作ミスなどを考えても、社内サーバーの安全性は高まると思っています。ただ、それではメールなどでくるデータを社内で使用することができないため、Macのみインターネットと社内ネットワークの両方に接続することを許可しています。これにより、Macが感染することはあっても、そこからWindowsサーバーへの急激なウィルス感染は防げると考えています。
上記理由のため、Macには2枚のネットワークカードを用意し、片方をインターネットに、もう片方を社内ネットワークに接続しています。それぞれのネットワークカードのIPアドレスはDHCPでIPアドレスを配布し、ルータのアドレスも当然一緒に配布しています。ただし、Macの設定で優先のネットワークのルータアドレスがデフォルトルータとなり、優先でない方のネットワークにあるルータの先にはそのままではアクセスできません。(Macのルーティングテーブルに登録がないのでありますから、当たり前ですね)そのために静的ルーティングを登録したいのです。
また、上記のような運用としていますので、Macは複数のユーザーがしようスルッコトとなりますので、あるユーザーが使った後は、ログアウトし、別のユーザーがログインして使用することとなります。(もちろん一度ルーティングアドレスが登録された後は、誰がログインしても大丈夫ですが、電源を入れた後、誰が一番にログンするかは、わかりません)そのため、ログインする目に登録しなければ、すべてのユーザーの設定を変更して行かなくては行けなくなります。また、ログインのユーザー認証は、Macではなく、社内サーバーが行いますので、ログイン前にルーティングテーブルが登録されていなければ、ログインユーザーの認証すらできません。(もちろん、社内サーバーに登録されているユーザーをMacに再度登録すればいいのですが、それではサーバーで認証する意味が全くなくなってしまいます。)
テストの結果として、Macに静的IPアドレスを設定し、DHCPでのIPアドレス配布をしなければ、rc.commonファイルでできることがわかっています。管理コストを下げるために、なんとかDHCPでの配布をしたいと思ってます。(万が一ルータのアドレスなどがかわっても、一つ一つのコンピュータの設定を変更する必要がないですからね)
rc.commonの書式は、いろんなことができるのですね。ちょっと考えてみます。
ありがとうございました。

2005/03/27 18:36 Community User への返信

やっとSystemStarterの使い方が理解出来ました。
 rc.commonはStarterで起動される各種サービスの共通部分を定義したファイル
 (すべてのサービスで最初に実行する共有部分)
 個別のサービスはサービス名でフォルダを作り、
 サービス名のシェルスクリプトファイルをいれる
 サービス名.plistでどのサービスのあとに立ち上げるなどの設定が可能
ということですね。
ここまで出来るのなら、シェルスクリプトかけますね。
 ifconfig en0 と ifconfig en1の出力を比較し、
 社内Networkを向いているインターフェースを特定
 無条件でDefault Routeを一旦削除して、
 インターネット側のインターフェース名を指定して
  Default Routeをきり直す
 最後に社内LAN側のインターフェース名を指定して
  スタティックルーティングをきってやればOK
という感じですね。
DHCPの取り込みが後になったほうがDefault Routing情報を上書きしてしまいますから、どっちがDefaultをとるかはその都度変わるわけだし。都度調べる必要があるでしょう。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

静的ルーティング

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。