静的ルーティング

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

投稿日 2005/03/17 19:30

返信: 32

2005/03/28 02:46 Community User への返信

> ネットワークの設計が出てきましたので、説明させていただきます
お話の環境なら、クライアントマシンに2つのルーティングを設定するのではなくて、DMZ が設定できるようなファイアウォールを用意して、DMZ にサーバやプロキシを置くなどして運用するのが筋だろうと思います。こうしておけば、クライアントマシンやDMZ に置くサーバマシンの default route は一つで済みますし、外からは完全に遮断できます。
クライアントマシンが外にアクセスするのは、DMZ に置いているサーバやプロキシを通してのみです。DMZ の線のところに透過型のアンチウイルスアプライアンスを置いておけば、外<=>クライアント間のトラフィックは、メール、 html、チャット、全てチェックできます(このようなアンチウイルスアプライアンスでも、規模にもよりますがそれほど高価でもありません)ので、クライアントマシンにウイルスチェッカーを入れる必要もなくなります。ポリシーでこれらのうちのいくつかを使用不可にすることもできます。また、マックと Windows で差別する必要もなくなります。

2005/03/28 08:07 Community User への返信

Default Routingはたぶん、システム環境設定のネットワークで優先のネットワークの方になっているようです。(パケットの通り方を観察すると)
問題は、
>最後に社内LAN側のインターフェース名を指定して
  スタティックルーティングをきってやればOK
のところです。Macのroute addコマンドではインターフェース名を指定してやると、エラーが出ます。manで調べてターミナルから入力してみたのですが、エラーが出ます。
route add 192.168.17.0/24 192.168.19.1 interface en0
のようなものはだめです。
書式をご存知ですか?
よろしくお願いします。

2005/03/28 08:26 Community User への返信

おっしゃっていることはごもっともだと思います。私も会社へはその提案をしています。ただ、当然莫大な費用(数百万円)の初期費用と年間数十万円以上の運用費用がかかること、ユーザーの操作性の低下が必ず起こることになるため、採用していません。
また、ウィルス対策ソフト(アプライアンス)は万能ではないため、万が一の感染時のサーバーへの影響を考えると、インターネットへの接続をMacのみに限定する方が管理コストの低下などから考え、このポリシーを採用しています。(Macに感染するウィルスはWindowsには感染しないですよね!今のところ・・・)
確かに、クライアントマシンのdefault routeは一つである方が、スマートであるし管理もしやすいと思いますが、上記理由によりできていません。会社がお金を出してくれればいいのですが・・・

2005/03/28 09:05 Community User への返信

> エラーが出ます。
エラーが出るのは、書式の問題ではないのではないでしょうか。
コマンドを実行するときにコンソールを出しておくともっと詳しいエラーメッセージが出ませんか。実行時に、-v (verbose)を指定してもいいかも知れません。
まだ、en0 にアドレスが設定されてないうちに route command が実行されているとか、そもそも、interface の指定が不要、とか。
man route には、interface の指定が必要なのは、
If the destination is directly reachable via an interface requiring no intermediary system to act as a gateway, the -interface modifier should be specified
とあります。これに該当しているのでしょうか。あるいは、(例に挙げられているように)、interface の前の - がないとか。

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

> ただ、当然莫大な費用(数百万円)の初期費用と年間数十万円以上の運用費用
ネットワーク上のマシンが200ー300台程度以下なら、取り敢えず、DMZ を作るファイアウォールを用意するだけでなんとかなりますので、そんなにかけなくてもできますし、運用費用も不要にできますよ。家庭用に売られているルータでも、DMZ を作れるものが少なくありませんから。業務用のものでも、この程度の規模以下なら、高々数十万以下のもので十分ですし、ちょっとネットワークをかじった個人で管理できます。
あとは、おっしゃるようにポリシーで Windows はインターネットアクセス禁止にしておけば(ファイアウォールでアドレスベースで設定する)、これ以上の費用無しでできます。

2005/03/28 15:42 Community User への返信

手元でテストした書式を示します。これでいけそうですが?
age:〜 sage$ sudo route add -net 192.168.1.0/24 -interface en1
add net 192.168.1.0: gateway en1
age:〜 sage$ netstat -nr
Internet:
Destination Gateway Flags Refs Use Netif Expire
192.168.1 0:11:24:xx:xx:xx USc 0 0 en1
   :
age:〜 sage$ sudo route delete -net 192.168.1.0/24
delete net 192.168.1.0
age:〜 sage$
おためしあれ。

2005/03/29 11:17 Community User への返信

>interface の前の - がないとか。
どうもこれっぽいです。(^_^;)もう一度試してみます。
はじめにしっかりと、入力したコマンドを書かなかった、私が原因ですね・・・
結果をまた報告します。

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

考えてみると、インターフェース名を指定してルーティングを切ること自体必要ない気がするのですが。インターフェースがきちんとUp状態なら、そういうことを考えなくていいはずです。
インターフェースがUpした時点で、「直結されたネットワークセグメントへのルーティングとして」こんな設定を自動で「システムが作ってくれる」はずです。
sage:〜 age$ netstat -nr
Destination Gateway Flags Refs Use Netif Expire
128.1.1/24 link#5 UCS 0 0 en1
128.1.1.1 127.0.0.1 UHS 0 1 lo0
この部分が、まさにインターフェースを指定したルーティングに相当する部分です。ですが、自動的に設定されるので、手動で作る必要はないのでは?
その状態で、この先のネットワークへのゲートウェイ(ルータ)を指定してルーティングを定義するだけでいいはず。このケースでは、直結されたセグメント128.1.1/24にあるゲートウェイを指定して、ルーティングを作っています。
sage:〜 age$ sudo route add -net 130.1.1.0/24 128.1.1.251
add net 130.1.1.0: gateway 128.1.1.251
sage:〜 age$ netstat -nr
Destination Gateway Flags Refs Use Netif Expire
128.1.1/24 link#5 UCS 0 0 en1
128.1.1.1 127.0.0.1 UHS 0 1 lo0
128.1.1.251 link#5 UHLW 1 0 en1
130.1.1/24 128.1.1.251 UGSc 0 0 en1
//
おそらく希望されているのはこういう記述でしょうか?
sage:〜 age$ sudo route add -net 131.1.1.0/24 -interface en1
add net 131.1.1.0: gateway en1
これを行うと、こうなってしまいます。
Destination Gateway Flags Refs Use Netif Expire
131.1.1/24 0:11:24:xx:xx:xx USc 0 0 en1
あるいは、こちらの記述だとエラーになり使えません。
sage:〜 age$ sudo route add -net 131.1.1.0/24 128.1.1.252 -interface en1
route: bad address: en1

2005/04/02 07:18 Community User への返信

>考えてみると、インターフェース名を指定してルーティングを切ること自体必要ない気がするのですが。インターフェースがきちんとUp状態なら、そういうことを考えなくていいはずです。
まさにその通りです。
例えば次のような環境
en0:Macの有線ネットワークのインターフェース(インターネット接続のルータに接続)
en1:AirMacのインターフェース(社内サーバ用ルータに接続)
en0のIPアドレス:192.168.0.xxx/24(DHCPで配布) GateWay:192.168.0.1(DHCPで配布)
en1のIPアドレス:192.168.16.xxx/24(DHCPで配布)GateWay:192.168.16.1(DHCPで配布)
システム環境設定のネットワークでen0(有線のインターフェース)を優先のネットワークに設定しています。
この状態で社内サーバ(例えば192.168.17.1)へ接続しようとしても、優先ネットワークが優先なので、AirMacの先に接続してある社内サーバには接続できません。そのため、この状態でターミナルから
route add 192.168.17.0/24 192.168.16.1
と入力するとen1にルーティングテーブルが追加され、社内サーバに接続できます。
そこで、電源を入れたときにこのルーティングかすぐ使えるように、rc.commonファイルの最後にこの記述を追加し、再起動するとなぜか上記ルーティングがen0に割り当てられてしまいます。多分、インターフェースがupする前にrc.commonが実行されているような感じがしています。ちなみにen0、en1にDHCPでなく固定的にIPアドレスを割り当てるとうまく行きますので、多分タイミングの問題のような気がしてます。(当然それでは困るのですが・・・)
私としては、ユーザーのログイン前でインターフェースのup後にrouteコマンドを発行する方法か、インターフェースを指定して、routeコマンドを発行する方法がわかればいいような気がしています。
ちなみに
route add 192.168.17.0/24 192.168.16.1 -inteface en1
とするとおっしゃる通り「en1は誤ったIPアドレスです」という意味のエラーになりますので、-interface句の後ろは、インターフェース名ではなく、インターフェースのIPアドレスを指定しなければならないのでは・・・?という気がしています。もしそうならDHCPサーバーでは配布できないということになりますね。(まだ試していません)
何かいい知恵がありましたらお願いします。

2005/04/02 09:05 Community User への返信

> route add 192.168.17.0/24 192.168.16.1 -inteface en1
> とするとおっしゃる通り「en1は誤ったIPアドレスです」という意味のエラーになりますので、..
えーと、(わたしもわたし以外も)何度もいっている(つもり)なんですが、勘違いされてません?
en1 にアドレスが設定される前に、それを対象とした route command など実行できませんよ。(エラーはそのためです)

2005/04/02 12:26 Community User への返信

ポリシーも守れてないし、安全性の予測も不十分です。
それを元にネットワークの設計をしたところでうまくいくはずがありません。
本当に構築すべきネットワークはmsg # 6.2で既に述べられていると思いますので重複は避けます。

2005/04/02 12:40 Community User への返信

対策費用よりも、サーバにあるデータを守る方が資産価値があると思いますけど(笑)。
きちんとネットワークが構築できれば、ユーザの操作性の低下は無く、むしろ現状より安全な上に利便性が向上します。
例えば可能性として、ウィンドウズにしか感染しないウイルスを、マッキントッシュで問題なかったからと誤ってサーバに置いてしまう危険は避けられないと思います。
ウィンドウズでは例えインターネットに接続しないLANでもネットワークに繋いで使うのなら、ウイルスソフトは絶対の効力を発揮しないという判断でも必須です。
あとサーバのハードやソフトのトラブルに加えて、ウイルスの被害からの復旧のためにも、定期的にサーバに置いてるデータのバックアップを検討した方がいいと思います。
まあ、被害に遭って損失を被ってからやっとお金を出してくれるなんて、泥縄な事態が来ないと変わらないのかもしれませんね。

2005/04/02 17:37 Community User への返信

6.1に書いたとおり、
> rc.commonはStarterで起動される各種サービスの共通部分を定義したファイル
> (すべてのサービスで最初に実行する共有部分)
> 個別のサービスはサービス名でフォルダを作り、
> サービス名のシェルスクリプトファイルをいれる
> サービス名.plistでどのサービスのあとに立ち上げるなどの設定が可能
です。
rc.commonにroutingを設定するのは正しい方法ではありません。ほかのサービスでも都度実行されてしまいますので。代わりに
「/Lirary/StartupItems/Routing/」
「/Lirary/StartupItems/Routing/Routing」
「/Lirary/StartupItems/Routing/StartupParameters.plist」
などを「自分で作る」必要があります。
 http://www.0-i-0.com/bbs/c-board.cgi?cmd=ntr;tree=3322;id=
オーナ/グループ/アクセス権は、例えばこんな感じです。
sage:〜 age$ ls -ld /Library/StartupItems/VirtualPCOSServices
drwxrwxr-x 5 root admin 170 22 Oct 16:00 /Library/StartupItems/VirtualPCOSServices
sage:〜 age$ ls -l /Library/StartupItems/VirtualPCOSServices
-rw-rw-r-- 1 root admin 443 22 Oct 16:00 StartupParameters.plist
-rwxrwxr-x 1 root admin 807 22 Oct 16:00 VirtualPCOSServices
このようにフォルダ名と同一の実行ファイルを用意する、というところがキモです。
Unixの知識が無いとこの辺難しいかもしれません。

2005/04/04 12:41 Community User への返信

申し訳ありません。やっと文の意味を理解できました。
6.1は、そういうことを書いていたのですね、自分の理解力のなさに嫌気が差します。
分かりました。自分でルーティングテーブルを登録するサービスを作成するイメージですね。
確かに、このあたりになりますと、私の力では今のところ手が出せません。どうしても必要であれば、費用を出してどこかにやってもらうことにするか、あきらめるかどちらかにするようにします。
ありがとうございました。

2005/04/04 12:56 Community User への返信

>まあ、被害に遭って損失を被ってからやっとお金を出してくれるなんて、泥縄な事態が来ないと変わらないのかもしれませんね。
担当者の私としては、本当にこうならないと会社は変わらないと思っています。(とはいえ、声を出すことも私の仕事と思っていますので、経営者に煙たがられても声を出すようにしています)
ウィルスの懸念点は、重々承知してます。ですのでMac上のウィルス対策ソフトでWindowsのウィルスを検出できること、プロバイダのウィルスチェックを利用すること(当社はメールサーバーに当社契約のプロバイダのメールサーバーを利用し、それ以外のメールサーバーを使用しないことをポリシーとして指導しています)圧縮ファイルはMacで必ず解凍処理をすること、ファイル共有サービスを提供しているWindowsサーバーにウィルスチェックソフトをインストールすること(定義ファイルは手動更新ですが・・・)、サーバーのクラスタ構成、テープバックアップなどを実施しています。
私としては、社員が故意に悪さをすることはない(会社の方針ですので、この部分を変更することはできません。もちろん声は上げますが、従業員性善説上に立って、システムを提案しなければならない立場です。)ので、ユーザーの操作ミスでの感染を避けたいのです。

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

静的ルーティング

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