WinPCapを使ったブリッジ接続問題を解決!?

coLinuxの設定の鬼門といえばネットワーク。 特にブリッジ接続を行おうとすると落とし穴が待っている場合があります。

ブリッジ接続なんていらないって言う人もいるかもしれませんが、 coLinuxをブリッジ接続するとcoLinuxをホストPCが繋がっているLANに直接参加 させることができて何かと便利です。 私の環境ではLAN上にLinuxのファイルサーバがあるので、 そのデータをcoLinuxと共用するにはブリッジ接続の方が好ましいのです。

WindowsXPを使っている人は、TAP-Win32ドライバでホストPCとcoLinuxを接続して、 WindowsXPのブリッジ機能を使えばよい(「ネットワークとダイアルアップ接続」で、 「TAP-Win32の接続」と「本当のNICの接続」の2つを選択した状態での 右クリックメニューで「ブリッジ」を選べばOKです)のですが、 Windows2000の人はWinPCapを使うかetherbridgeというちょっと怪しげなソフトを使うしかありません。

このページでは、私がWinPCapを使ってはまった落とし穴と、 脱出方法を説明します。

Amazonのベストセラー
(ジャンル: TCP/IP)

何が問題か?

まず、事実として、 私の自宅のPCではWinPCapを使って問題なブリッジ接続できています。 方法は「coLinuxのインストール WinPCapを使ったブリッジ接続」を見てください。

ところが、会社のPCに入れたところ以下の問題が発生しました。

  • ホストPCからcoLinuxにtelnetやsshで接続できない。
  • ただし、ホストPCからcoLinuxにpingを打つとちゃんと返事が返ってくる。
  • しかも、ホストPCが繋がっているLAN上の他のPCからだと、 telnetやsshで接続できる。

これはどう考えても変ですよね? パケットキャプチャ等をしたのですがわからず、 結局ホストPCから一旦LAN上のLinuxにtelnetしてから、 coLinuxにtelnetしてしのいでいました。

一つ重要なことがありました。 etherbridgeというソフト入れたままだと、 WinPcapでブリッジ接続はできませんでした。 もしetherbridgeを入れていたなら一旦削除してから (詳しくは「Windows2000でTAP-Win32ドライバを使ったブリッジ接続」)、 再度WinPCapで挑戦してみてください。

一筋の光

しかし、さすがに不便なので、 coLinuxのメーリングリストの過去ログ等を探していたら、 IntelのNICを使っている人で同様の症状の人を発見しました。 その解決法は、 本家のWikiで nihilistさんによって以下のように記述されていました。

<nihilist>There have been a few instances where users have fully functional networking, but the Windows host and coLinux instance cannot see each other. For example, from a DOS prompt in 2k/XP, you cannot ping your coLinux instance. This is NOT a problem with coLinux, rather it has to do with the Windows network drivers. If you right-click on your network connection, and click properties, it will bring up a dialog. At the top of this box it will say "Connect using:" Click on the configure button below the specific NIC. Click on the advanced tab, and there should be one (for Broadcom NICs), or many (Intel Pro/1000 NICs) options that deal with TCP/IP checksums. Ensure that all of these are set to none/no/off. Click okay till all of the dialogs are closed, and then you should be able to ping 2k/XP from coLinux, or coLinux from 2k/XP.

(以下適当訳)
ネットワークが完全に機能している実例はいくつかあるけど、 WindowホストとcoLinuxがお互いに通信できない場合があるな。 例えば、Win2K/XPのDOSプロンプトからcoLinuxにpingができない場合がある。 これは、coLinuxの問題ではなく、Windowsネットワークドライバが処理しなければいけない問題だね。 ネットワーク接続を右クリックしてプロパティを選択すると、 ダイアログが表示されので、このダイアログボックスの上の方の「構成」ボタンを押す。 それで、詳細設定タブをクリックすると、 TCP/IPのチェックサムを扱うオプションが一つ(Broadcom NIC等)か 複数(Intel Pro/100 NIC等)が表示されるはず。 この全てのオプションがnone、no、offのいずれかになっているのを 確かめて欲しい。 OKを押して全てのダイアログボックスるを閉じると、Win2K/XPとcoLinux間でpingができるはずだ。

asedenoさんがフォローします。

<asedeno> I've found that only Transmission Checksum offloading needs to be disabled both TCP and IP), the Receive checksum offloading is ok. YMMV.

(以下適当訳)
送信Checksum offloadingだけを無効にすればよいことがわかったよ。 (TCPとIPの両方)。 受信側のchecksum offloadingはOKだ。効果は人によって異なるよ。

2004/7/18にはpiyoさん(日本人!?)がフォローします。

<piyo 2004-07-18T01:06:23+0900> I confirmed asedeno's assertion. Using Windows XP, my Network Connection is "Intel(R) PRO/1000 CT", and in the Advanced Tab, I set the following settings.
  • Offload Receive IP Checksum: On (default: On)
  • Offload Receive TCP Checksum: On (default: On)
  • Offload Transmit IP Checksum: Off (default: On)
  • Offload Transmit TCP Checksum: Off (default: On)
Also make sure to "poweroff" and restart your Colinux session(s) if you make this change while they are running.

(以下適当訳)
asedenoさんの主張を確認したよ。 私は、Windows XPを使っていて、接続にはは「Intel(R) PRO/1000 CT」を使っているけど、 詳細設定のタブでは以下のような設定になってる。
  • Offload Receive IP Checksum: On (default: On)
  • Offload Receive TCP Checksum: On (default: On)
  • Offload Transmit IP Checksum: Off (default: On)
  • Offload Transmit TCP Checksum: Off (default: On)
あと、もしcoLinuxが動いているなら一旦落として、 coLinuxを再起動するのを忘れないように。

最後に、2004/09/07にCCromeさんが情報を追加。

My 'Cisco Systems352 series Wireless LAN Adapter' does not work at all -- linux and host can't see each other. Once I got out of my Lazy-Boy and walked over where I could plug in a land line, I switched adapters my 'Intel(R) PRO/100 VE' and everything worked perfectly.

(以下適当訳)
私の「シスコSystem352シリーズWireless LANアダプタ」は うまく動かないよ。 linuxとホストがお互いに見えないんだ。 私のLazy-Boy(←ノートPC?)を持ち運んで、 LANにつないでアダプタをIntel(R) PRO/100 VEに切り替えると 完璧に動くんだけどね。

なんだか、いろいろ情報がありますがとにかく 「checksum offload」ってのが怪しいようですね。

やってみる

とりあえずやってみるしかありません。

会社のマシンには3Comの3C920という3C905C-TX互換のチップが乗っていました。 会社のPCのネットワークアダプタの詳細設定を見てみると・・・ ありましたよ「checksum offload」が! 2個所あったので早速両方ともdisableにしました (RX側はONでも良いという噂ですが、 念のため2つともdisableにしました)。

Tx Checksum Offload
Rx Checksum Offload

更に、念には念をいれてWindowsのリブートもしておきました。

結果

で結果はというと、、、、動きましたよ。 直接HostPCから接続できるようになりました! かなり快適になりました。心の中で知恵を授けてくれた先人に感謝しました。

おまけ

全てのドライバで「checksum offload」が設定できるわけでないようです。 実際、私の家のPCはNVidaのnForce(←Network機能内蔵チップセット)を 使っているのですが、 このドライバの詳細設定には「checksum offload」の設定はありません。 ま、ちゃんとブリッジ接続できているので、 そもそもこのチップには「checksum offload」機能はないのかもしれません。

では、ブリッジ接続できないし、 「checksum offload」なんて項目はないしって言う人はどうするかというと以下の方法が考えられます。 がんばってみてください。幸運を祈ります。

  • Ethernetチップのドライバを新しくしてみる。 新しいドライバでは「checksum offload」の設定ができるようになっているかも!?
  • レジストリを直接いじる。 少なくともIntelのチップはレジストリのどこかをいじると 「checksum offload」を「off」にできるようです(詳細は忘れました)。 他のチップでもいけるのではないでしょうか?
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送