今までのネットワーク接続はeth0でTAP-WIN32のアダプタに接続し、ホストマチン(Windows)のインターネット共有している。この方法で簡単にゲストのLinuxから外部(インターネットなど)に接続することはできるけど、外部(社内ネットワーク)からはゲストので動いているサーバへアクセスできない。社内ネットワークではcoLinuxのインスタンスに勝手にIPアドレスを与えることはできない場合サーバを公開したいならホストからゲストへポートをフォーワードするしかない。
以下の設定はetho0にTAP-WIN32の設定が既にあることを前提としている。
ホスト(Windows)側のcoLinuxの設定ファイルにslirpのインタフェースを追加する:
1 eth1=slirp
,,tcp:22:22/ tcp:80:80/ tcp:443:44 3 ゲスト(Linux)側の
/etc/netwo
にeth1を追加:rk/interfa ces 1 # secondary network for external network access 2 iface eth1 inet static 3 address 10.0.2.15 4 network 10.0.2.0 5 broadcast 10.0.2.255
6 netmask 255.255.25 5.0 7 gateway 10.0.2.2 10.0.2.15は適当なアドレスだけど、gatewayの10.0.2.2は特別で、slirpデーモンのデフォルトアドレスだ。
この記事ではcolinux0.7ちなみに、XAMPPやandLinuxのようなパッケージを使えばこの設定は不要らしい。
注意点
- windows側のfirewall設定
- 複数default gatewayのルーティング問題。解決策が二つ:
- SLiRPのgatewayのみにする。要するにeth0/tapにgatewayを定義せず、インターネットの通信をslirpに通す。このやりかたがわりと簡単だけど、SLiRPが若干遅いことと10.0.2.2(slirpデーモン)以外のところにpingできない
- 複数default gatewayのルーティングの設定をする (iproute2でpolicy routing)
- SLiRPはIPv6に対応していないため、ゲスト側で効果したいサービスがIPv6のアドレスにバインドしてしまうとうまくいかない。
netstat -n --inet6 --listenin
などで確認んできる。たとえば、sshの場合は:g 1 Proto Recv-Q Send-Q Local Address Foreign Address State 2 tcp6 0 :::22 :::* LISTEN
この問題を解決するにはIPv6を無効化にするか、各種サービスを明示的にIPv4のアドレスに設定する。
参考
posted by
lchin
on Thu 27 Nov 2008
at 15:58