もうすぐ8月も終わりですけど、やっとちゃんとした(笑)、夏休みを取りますので、申し訳ありませんが、今週の金曜日8/31の配信はお休みさせてください。8/30の次の発行は9/3になる予定ですので、とりあえず1日だけのお休みとさせてください。実家で法事があったりしますが、いろいろ事情があって高野山まで行っての法事、ついでに家族旅行ってことになっています。
ところで、先日、NATボックスがどうやらMACアドレスでチェックされているらしいということをお話しましたけど、読者の方より(いちおう名前は出さない方がいいですよね?)、メルコのNATボックスはハードウエアのMACアドレスを書き換えることができる機能があることを教えていただきました。だとすると、WAN側に、たとえば内部ネットワークで使っているEthernetポートのMACアドレスを設定すれば、プロバイダ側ではNATボックスを使っているという手がかりはなくなるでしょうね。実際それでうまくいっているとか…。私のプラネックスのbRoad Runnerでもその機能があるのかな? 調べてみますけど、実はこっそり教えてくれたりして(笑)。実はDHCP IDの入力方法もどこにも書いていなくって、メールで教えるということになっていましたし、買ったT-ZONEの人も、J-COMの人はプラネックスに直接聞いて下さい、OKですよなんて言っていたくらいだし(笑)。
で、全然話題は違いますが、第一ドメインに「.sex」なんてできたんですね。あるMLに参加者以外の投稿として来たメールで知りました(と怪しまれないように出所をとりあえず明らかに〜笑)。「pistols.sex」はまだあるみたいですよ、逆ですが(笑)。ちょっと指向を代えて、「safety.sex」なんてあいていますよ。ただ、どうも、dot.sexって以下のサイトではなく別のところに取られている節がありますね。
http://www.dotsex.com/
(新居雅行 msyk@mdonline.jp)
さて、今回はMySQLの話である。MacOSXServer1.2の時代には、MySQLなところでも、Macなところでもあんまりこの組み合わせの話題は上がらなかったんだけど(少なくとも日本語コミュニティでは)、最近ちょっとは目にするようになったので、うれしいのである。たとえば、他所の記事なんだけど、HotWired Japanにある「ウェブ・デベロッパーのための『Mac OS X』活用法」というシリーズでは、「無料の『Perl』、『PHP』、『MySQL』とかのソフトウェアをセットアップしてうまく利用し、Mac OS Xを最大限に活用する方法」を解説してくれている。
◇ウェブ・デベロッパーのための『Mac OS X』活用法
http://www.hotwired.co.jp/webmonkey/2001/30/index3a.htm
ただこの記事は英語圏の人間が自分の環境で書いたものを、そのまま翻訳しただけのようで、MySQLに関して言えば、日本語の扱いに問題が出るような気がする。そんなわけで、ここではUNIX的にはもう少し素直な方法を書いてみよう。
ところで、Macな人向けのUNIXとしてのOS X解説コラムとでも言うべき読み物が、新しく今月からMDOnlineの独占オリジナルコンテンツとして始まっている。大津真さんの「XはUNIXでサーバで」がそれで、この連載とあわせて読んでいただければ、より分かりやすいであろう。
さあ、まずMySQLだけれど、現行版のMac OS X Server 10.0.4には、最初っからMySQLが組み込まれている。10.0リリースの時にはまだ含まれていなかったのだが、その後いくつかあるアップデータを組み込むと、自動的に入っている。
入っているんだが、今回はこれは使わない。なぜなら、MySQLはけっこう地道に改良が重ねられているので、自動的に入るバージョンはすでに古いものになっていると言う理由がひとつ。ちなみに執筆時点(2001年8月27日)では、3.23.41というバージョンが最新だ。そして、これがもうひとつ重要な点だけど、Apple提供のMySQLは、どうも日本語の扱いに問題があるようなのだ。
ここでちょっとMySQLと日本語の関係について書いておくと、もともとのMySQLは、大昔はアルファベットしか扱えなかったのである。しかし、日本MySQLユーザー会代表のとみたまさひろ氏が日本語対応の労を取られたおかげで、現在ではEUCやShift-JISが利用できる。またこのとみた氏の拡張を基に、現在では多くの2バイト言語に対応しているのである。
◇日本MySQLユーザー会
http://www.mysql.gr.jp/
それならなぜAppleのもので日本語問題が生じるのだろうか。それは、コンパイル時に日本語を利用すると言うオプションをつけないかぎり、デフォルトのLatin1が選択されてしまうからなのだ。つまり、Appleのものは素のままでコンパイルしたに違いない。実はその状態でも日本語文字はだいたい扱う事ができるのだけれど、検索時に1バイト単位で検索がかかるので、正しい結果が得られない事があるのだ。それなら、素直に最初からEUCやShift-JISで稼動させておけば面倒がないのである。
というわけで、MySQLのコンパイルも自前でしてみよう。マルチバイト対応版として。
ところで、インストールした時にどこのディレクトリにインストールされるか、これもコンパイル時のオプションで指定しなくてはならない。指定がないと、デフォルトの/usr/local以下に各種ファイルが配置される。これで実行上不具合があるわけではないが、せっかく苦労して自分で作り上げても、このままではAppleのアップデータを導入すると、きれいに置き換えられてしまうのだ。だから、最初から違うところにインストールしようと思うのである。えっ?複数入れて大丈夫かって?たしかにかつてのMacでは、同じアプリケーションを複数インストールするのは不具合の原因とか言われた時代もあった。しかしこれはまったく問題ない。それどころか、複数インストールして複数同時に稼動する事だって不可能ではない。(今回そこまではしないけ
どね。)
あっ、ここでちょっと警告なんだけど、もしもあなたがUNIXははじめてで勘所もつかめないということであれば、この自前MySQL組み込みは止めておいた方がよい。これらの操作でシステムが損傷を受けたとしても、だれも面倒は見てくれない。自分の責任で背負い込むべきものなのである。すなおに、Appleが次のアップデータで改良をしてくれるのを待つべきだ。また、実運用中のサーバでいきなり試すのも止めよう。私自身、お金をいただいて利用していただいているサーバは、まだMac OS X Server1.2のままである。新しいサーバは、とりあえずPower Book G3/266にインストールして、各種テストをくり返している最中なのである。この記事もテストしながら書いているのだ。
さあ、覚悟のできた人は、次に進もう。
[森下克徳]
カテゴリ:データベース, 崖っぷちからWebObjects
メトロワークスは、CodeWarriorの次期バージョン「CodeWarrior Ver.7」の発売を前に2001年9月14日まで割引価格でアップデートできるサービスを行っているが、既存ユーザに郵送されてきた案内によると、アップデート版の発売は2001年10月1日を予定している。CodeWarrior Ver.7は、Mac OS XでのMach-Oバイナリの生成やObjective-C対応など、Mac OS X対応をより強化したバージョンである。英語版は2001年9月10日に出荷予定となっており、それほど時間を置くことなく日本語版が入手できそうだ。
関連リンク:CodeWarriorセンター
カテゴリ:CodeWarrior
Mac OS X Server 10.0では、ホスト名を正しく設定しておかないと、Server Adminによる接続やあるいはその他のクライアントからの利用に支障が出る場合があることがKnowledge Baseに掲載されている。ホスト名は、DNSの登録内容に応じて、たとえばサブドメイン名をそのまま設定するが、セットアップアシスタントで適切な名前を設定していない場合もある。また、DNSでの設定や接続が正しく行われている必要がある。ホスト名が正しく設定されていないときは、/etc/hostconfigファイルを修正する。そこで、hostname=の後に正しいホスト名を記載するようにする。このやり方を手順を追って説明しているが、rootでログインをしてTextEditを使う方法が記載されている。
関連リンク:Mac OS X Server 10.0: Incorrect Hostname May Cause Trouble Connecting With Server Admin or Other Services
カテゴリ:Knowledge Base(旧TIL), ネットワーク, Mac OS X Server
Mac OS X Server 10.0.xで、ログインウインドウのところで起動が止まってしまう場合の対処についてKnowledge Baseに記載された。これは、rootになってファイルのアクセス権を変更し、起動ディスクのEveryoneに対する読み込みの権限をなくしてしまったことによるものである。Mac OS X ServerをCommand+Vキーを押しながら起動し、一方別のマシンでServer Adminを起動してアクセス権を変更する方法が手順で記載されている。
関連リンク:Mac OS X Server 10.0: Blue Flashing Screen at Login Window
カテゴリ:Knowledge Base(旧TIL), Mac OS X Server
WebObjects 5のJDBCアダプタについての文書がKnowledge Baseに記載された。JDBCはJavaの標準機能として定義された機能で、多くのデータベースエンジンが採用している。JDBC対応ドライバを利用してデータベース利用するのがWebObjects 5である。ただし、JDBCドライバがすべて同じように機能するわけではないので、JDBCPlugInとして、特定のJDBCドライバの動作をカスタマイズすることができる。WebObjects 5のJDBCアダプタでは、Oracle 8iとOpenBase SQLについてはプラグインの機能を最初から組み込まれている。
関連リンク:WebObjects: JDBC Adaptors
カテゴリ:Knowledge Base(旧TIL), WebObjects
Mac OS 8.6〜9.2.1で、Carbonフレームワークを実現する機能拡張であるCarbonLibのVer.1.4が配付され始めた。現在は英語版だけの配付だ。すでにCarbonLib SDK 1.4の配付は始まっている。また、Mac OS 9.2.1にはVer.1.4が含まれており、こちらは日本語版のアップデータだと日本語番のCarbonLib 1.4が含まれている。以下のページでの配付は、Mac OS 8.6〜9.1での利用のためである。
関連リンク:CarbonLib 1.4:Document and Software
カテゴリ:Knowledge Base(旧TIL), Carbon/CF
Apple Studio Display 17で発生するノイズ音についての説明がKnowledge BaseおよびTech Info Libraryに解説されている。Blue&WhiteあるいはグラファイトのCRTタイプで発生する。放電によって、ディスプレイの内部からピシピシという音やピシッという音が発生する。通常は安全性には問題はない。こうした現象が出た場合にはアップルに連絡が欲しいとしている。TILには日本の場合の連絡先が記載されている。
◇Apple Studio Display 17: Popping or Cracking Sound
http://www.info.apple.com/kbnum/n88195
◇Apple Studio Display (17" CRT): 放電をともなうポッピングノイズの現象について
http://til.info.apple.co.jp/cgi-bin/artnum?id=88195JC
カテゴリ:Tech Info Library-J, Knowledge Base(旧TIL), 周辺機器
BarrySoftwareは、REALbasicからMySQLに接続するプラグイン「MySQLConnect」をリリースしている。REALbasic 3.5から加わったデータソース機能に対応するように、MySQLConnectについてもバージョンアップが行われている。価格は$50となっているがデモ利用も可能だ。
関連リンク:MySQLConnect
カテゴリ:ライブラリ, データベース
IPアドレスの枯渇が…などというグローバルな理由はともかく、インターネットに接続するのに必要なIPアドレスは、あまりたくさんは使えないのが一般的だ。256個(常識的には最大254個だけど…)のアドレスが使えるクラスCをもらうにも大変…なんてのは数年前までの話で、今ではローコストの接続では8個とかのIPアドレスが精一杯だ。そして、ブロードバンドが広がるとは言われながらも個人利用では1個がせいぜいであったりする。
小さな会社だったら8個でも…という理屈もあるだろうけど、一般には8個では足りないことが多い。また、パソコンを何台も持っている人も少なくないので、個人ユーザにとっても1アドレスは足りない。そこでクローズアップされるのがNATという手法である。正確にはNetwork Address Translatorということで、意味的にはアドレス変換ということだ。技術的には完全な説明にはならないけど、現実の世界では、要はNATっていうのは、IPアドレスの数より多くのパソコンをインターネットにつなげる技術であると言える。
こういう状況を想定してほしい。ハブがあって、そこにたとえばパソコンが6台つながっている。これらのパソコンには、ローカルなネットワークにだけ使えるプライベートIPアドレスが割り振られている。具体的には、192.168.1.101〜106としようか。このネットワークを「内部ネットワーク」と呼ぼう。もちろん、これらの6台の間ではそれなりにIP通信はできるけど、インターネットには接続できない。そこで、ハブにもう1台パソコンをつないだとしよう(これをルータマシンと呼ぶことにする)。そのパソコンのIPアドレスは、192.168.1.1だったとする。話が分かりやすいように、その新たに繋いだパソコンには、もう1つEthernetアダプタが取り付けられている。そのアダプタは、ADSLモデムにつながっていて諸設定が正しく行われており、192.168.1.1のパソコンからはインターネット接続ができるとしよう。もちろん、ADSLモデムがつながっているEthernetアダプタはグローバルIPアドレスが、おそらくはプロバイダのDHCPサーバより供給されて設定されているはずだ。仮にそのIPアドレスは、99.88.77.66としよう。
このままだと、192.168.1.101は、192.168.1.1とはIP通信できるけど、それより先とは通信ができないので、インターネット利用はできない。そこで、ルータマシンに細工を行う。192.168.1.101〜106が、たとえば、www.apple.co.jpにアクセスしたとしよう。そのとき、ルータマシンに要求が送られるとする。ルータマシンでは、本当は192.168.1.101からwww.apple.co.jpに対する要求なのだけど、自分自身のグローバルアドレスである99.88.77.66からwww.apple.co.jpに対する要求にすり替える。そして、ADSLモデムを通じてインターネット通信を行う。もちろん、アップルのサイトからWebページの内容が応答としてが99.88.77.66に送られてくる。そうして送られてきたデータを、改めて192.168.1.101に送る。こうすることで、本来はインターネットにはつながっていない192.168.1.101〜106も、ルータマシンを通じてインターネット接続ができてしまう。これを一般にはNATと呼んでいる。実用的には1つのIPアドレスを複数のマシンで共有するような動作を含めたりしたい。こうした機能を実現する有名なのはLinuxでのNAT機能で「IPマスカレード」と呼ばれているものだ。逆に、IPマスカレード自体がこうした機能の代名詞にもなっている。基本的には、IPマスカレードの代表的なものがLinuxでの実装ということである。
一方、FreeBSDにもNATの機能を実現する仕組みが含められている。技術的にはアドレスのエイリアス、つまりアドレスの置き換えのような仕組みを使うのであるが、むしろNATの処理を行うデーモンであるnatdという名前がいちばん有名だろう。実は、後で説明するようにnatdだけでNATをするのではないのだが、名前のこともあって、FreeBSDはnatdだってことになってしまっている。もちろん、BSD系統のMac OS Xでもnatdは含まれていて、Terminalで「man natd」とコマンド入力してマニュアルを参照してもらうと、極めて詳細な情報が得られる。で、今回のテーマであるMac OS XでのNATは結論を先に言えば、natdのマニュアルの情報でほぼすべてと言ってよいのであるが、むしろそこに書いていることをすべて行わないといけないわけではない。
なお、IPマスカレードは、アドレスだけでなくポート変換も行うNAPT(Network Address Port Translation)という動作を行うことが可能だ。さらに、前記のNATの手法だと、内部ネットワークからインターネット利用は可能だけど、インターネット側から内部ネットワークには接続できないのが一般的である。つまり、内部ネットワークは、外部に対してはクライアントとしてしか動作しないのである。こうしたNATを伝統的NAT(Traditional NAT)と呼んでいる。一方、インターネットから内部ネットワークへの接続を可能にする両方向NAT(Bi-directional NAT)という技術もある。
ところで、最近はこうしたNATの処理は、「ブロードバンドルータ」などと呼ばれる単体の製品でも行えるようになった。秋葉原だと、17000円前後から購入できるので、手軽にNATをやりたい人は、こうした製品がお勧めだ。単にEthernet端子と電源を入れ、あとはWebブラウザから設定をするだけでOKというのが一般的だろう。値段と手軽さを加えれば、NATをやりたいときに最初に思い浮かぶのがこうした機器を使うことだ。「NATボックス」などと呼ばれることもある。たとえば、YahooBBでインターネット接続を行って、何台かのパソコンで同時に、あるいは設定をそれぞれ変えずにインターネットをしたいのなら、ブロードバンドルータはいちばん手軽なソリューションである。(などとYahooBBの連絡待ちをしながらこうした例を書くのは、とほほな話でもあるが…)また、伝統的NATの機能だけでなく、インターネット側からWebアクセスがあれば、内部ネットワークの指定したIPアドレスのマシンとのサーバ接続を可能にするような両方向NATの機能も含まれている場合もある。
一方、サーバをすでにたてているのであれば、なるべく機器を増やしたくないなどの理由で、NATの処理をサーバにさせたいと思うこともあるかも知れない。今回の記事では、つまりはMac OS XやMac OS X ServerでNATをしようというわけである。ちなみに、NATの処理を行うマシンってそうした中継処理をするのだから重たくなるのかと思うかも知れないが、数人程度のNAT処理だったら、やっているのは全然分からないくらい軽い。CPUの利用率を見ていても、Internet Explorerの方がよっぽどCPUパワーを食っている。ブロードバンドとは言え、まだまだネットワーク処理というのが低速なのだということだろう。
前の例では、分かりやすいように、ルータマシンに2枚のEthernetカードがあるとして説明した。Mac OS X/ServerでもディアイティのEthernetカードのようにMac OS X対応のものがあれば、たとえばPower Mac G4に接続し、内蔵のEthernetとカードのEthernetの2つのネットワーク端子が装備できる。しかしながら、一方はアナログモデムによる接続でもいいし、ワイアレスLANでもいい。とにかく、ネットワーク接続が可能なものならそれらの間で、NATができる。さらに、Ethernet端子が1つでもNATはできる。Ethernet端子は1つのIPアドレスを割り当てるのが一般的だが、Mac OS Xでは複数のIPアドレスの割り当てが可能だ(というか、UNIX系OSではそれが当たり前の機能)。こうした動作は「マルチホーミング」などと呼ばれている。Mac OS Xで可能なはずだが、残念ながらMac OS X 10.0.xではシステム環境設定では複数のIPアドレス割り当てができない。Terminalからコマンドを入れるか、起動スクリプトで2つ目以降のIPアドレスの割り当てが必要になる。いずれにして、そうした状況だと、Ethernetのポートは1つだけど、考え方としては2つのポートがあるように見ればよい。そうすれば、一方のIPアドレス側から入ってきたリクエストを別のIPアドレスに対してNAT処理をするといったことができるのである。だから、1ポートでもNATは可能だということだ。
(続く)
カテゴリ:ネットワーク管理, ネットワーク, Browsing Mac OS X
Mac OS XでNATの動作を行うには、まず、/etc/hostconfigというファイルを修正する。そのファイルにある「IPFORWARDING=-NO-」を「IPFORWARDING=-YES-」に変更する。そして、再起動する。この設定により起動スクリプトにあるNetworkにおいて「sysctl -w net.inet.ip.forwarding=1」というコマンドが実行される。これはカーネルの設定を行うコマンドであり、もちろん、手でコマンド入力してもいいのだが、hostconfigで設定をして、再起動するという手軽な手段が用意されているので、それを利用しよう。ところで、/etc/hostconfigの編集だが、viやpicoといったTerminal内で使うエディタが得意な人はそちらを使うとして、どうしてもそれは大変という場合には、以下のコマンドを入力して、管理者パスワードを入力すると、TextEditで編集や保存が可能になる。
sudo open -a /Applications/TextEdit.app /etc/hostconfig
こうして再起動した後は、Terminalを起動して、以下のコマンドを入力するが、これはrootの権限で実行しないといけない。各コマンドの前にsudoを入れるか、あるいはNetInfo Managerでrootになれるようにしておくなどして、suコマンドを入力してrootになってコマンドを入力する。ipfwコマンドは普通のユーザで入力しても、エラーになるだけで設定はされない。
natd -interface en0
ipfw -f flush
ipfw add divert natd all from any to any via en0
ipfw add allow ip from any to any
ただし、一連のコマンドの中にある「en0」は状況によって変わる。これは、ネットワークポートを示す記号である。EthernetとAirMacを接続していると、Ethernetはen0、AirMacはen1となる。自分の使っているマシンでのネットワークポート名は、「ifconfig -a」というコマンドで確認できる。(以下の例は一部いい加減な数値が入っている点はご了承いただきたい)
% ifconfig -a
lo0: flags=8049
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863
inet 99.88.77.66 netmask 0xfffffe00 broadcast 99.88.77.255
ether 00:30:65:f6:c2:e4
media: autoselect (100baseTX
supported media: none autoselect 10baseT/UTP
en1: flags=8863
inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:30:65:08:ec:03
media: autoselect status: active
supported media: autoselect
これだけ見て、どちらがEthernetなのかは分からなくはないのだが、システム環境設定で設定されているIPアドレスを見比べればだいたい分かるだろう。ほかに、/Applications/UtilitesにあるNetwork Utilityにある「Info」タグの情報を見ることでもかまわない。
そして、natdコマンドやipfwコマンドのポート名は、インターネットに接続されているグローバルIPアドレスが割り当てられているネットワーク端子名を指定する。たとえば、ADSLモデムが接続されていたり、あるいはPPP接続しているモデム側のポートを指定する。いずれにしても、これで、コマンドを起動させたマシンでは、NATが機能する。
natdはNATをするとしても、ipfwは何をするかだが、これは、BSDの中に組み込まれたファイアウォールの機能を利用するものである。ipfwによってそのファイアウォール機能の動作を規定する。ただ、本来はさまざまなフィルタ設定などができるのだが、前記のコマンドは、とにかく全部のパケットをdivertポートと呼ばれるポートに流すということだ。こうしたファイアウォールでのIPパケット処理機能とNATを行うデーモンを組み合わせて、全体としてNAT処理を行うのである。なお、ipfwの設定を確認するには「ipfw -a list」というコマンドを使う。
1つのネットワーク端子でNATを行うには、以下のコマンドを入れてポートに2つ目のIPアドレスを割り当てる。もちろん、IPアドレスやネットマスクは適時変更してもらいたいし、en0ではないポートだとその名前を指定する。
ifconfig en0 alias 192.168.1.150 netmask 255.255.255.0
複数のIPアドレスが設定されたかを確認するには、やはり「ifconfig -a」コマンドを使う。ネットワーク端子の設定で、inetで始まる行を確認すればよい。以下のように2行見えればそれでOKだ。各アドレスとネットマスクも確認できる。
% ifconfig -a
lo0: flags=8049
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863
inet 99.88.77.66 netmask 0xfffffe00 broadcast 99.88.77.255
inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:30:65:f6:c2:e4
media: autoselect (100baseTX
supported media: none autoselect 10baseT/UTP
あとは、natd、ipfwの3つのコマンドを入れれば良い。
ところでnatdのマニュアルを読むと、カーネルの再コンパイルなどと書いてある箇所があり、いきなりびっくりするが、そこでの要件をみたしてMac OS Xのカーネルはコンパイルされているようである。また、/etc/servicesに追加するという設定も、最初から行われている。他にも設定を加えることなどが書いてあるが、それらは行わなくても機能している。つまり、マニュアルに書かれていることはすべてを行う必要はなく、上記のことだけを行えばよいようだ。インターネットでnatdについての説明を検索すると、いろいろ見つかるのだが、比較的古いFreeBSDをベースにした話が多く、やはりそれらでも再コンパイルなどの話から入っている。参考にはもちろんなる場合もあるのだが、Mac OS Xで必要なことと不要なことを見極めないといけないだろう。もっともそれが最初から分かっていれば苦労はしないぞということになるけども…。
さて、こうしたコマンドをいちいち起動するたびに入力するなんてやってられないと思うところだろう。もちろん、起動スクリプトを作るというのが筋ではあるが、もうすぐMac OS X 10.1が出てくる。もしかしたら、チェックボックス1つでNATが実現できるようになっているかもしれないし、マルチホーミングだって同様だ。とりあえずは様子を見てから作る…ということでお許しいただきたい。
カテゴリ:ネットワーク管理, ネットワーク, Browsing Mac OS X