仮想マシンのCentOSを外部ネットワークに接続 | シムタロウのブログ

シムタロウのブログ

組み込みソフトエンジニアです。ツール使用時の話を書いていきます

Simicsの仮想PC "Viper"にCentOS6.5をインストールした

このマシンにGCC等をインストールするために外部サーバーへの接続を行いました

 

まず実現した構成は以下の図の通り

 

順に説明します

 

ホストマシンと仮想マシンの間には仮想アダプタであるSimtap0なる物がいるが

 

これはTAPインタフェース

作成方法はSimicsのマニュアルにあるのでここでは省略

作成したのちに図にあるように 192.168.0.100というIPアドレスを割り振っておく

 

Simicsのコマンドラインから

 

 

simics>connect-real-network-host interface= Simtap0

 

 

というコマンドを入力すると上の図の中の EthernetSwitch0 と RealNetworkオブジェクトを

 

作成し、Viperのeth0から Simtap0までの接続も行ってくれる

これで(物理レベルでいうと)配線が完了したことになるので

あとは設定である

 

まずはゲストOSであるCentOS6.5

 

まだネットワークの設定を何も行っていない

 

CentOSでネットワーク設定を行うには root権限で以下のファイルを編集用に開く

 

 

/etc/sysconfig/network-scripts/ifcfg-eth0

 

中身を以下のように変更する

 

 

DEVICE=eth0
HWADDR=00:19:A0:E1:1C:9F
TYPE=Ethernet
UUID=6b6e79fd-f980-4624-b8d5-df378cffb88b
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=192.168.0.10
GATEWAY=192.168.0.100
DNS1=128.224.230.11

 

これで再起動によりeth0が 192.168.0.10で有効となる

GATEWAYはSimtap0のアドレスを指定しておく

DNS1に指定したのはこの社内ネットワーク環境に存在する

本物のDNSサーバーのアドレスを使用した

 

OSの再起動を行わずにネットワークシステムの再起動を行うには

以下のコマンドをroot権限で実行する

 

/etc/init.d/networking restart
 
このリスタートが終わるとCentOSの設定はおしまい
ためしにCentOSのコマンドラインから
 
# ping 192.168.0.100
 
を実行するとちゃんと応答が返る
 
ところがDNSサーバのアドレスに対してのpingには応答が返らない
おわかりでしょうか?
それを実現するためにはホストOSのUbuntuでIPパケットを中継して
もらう必要があります
 
というわけでパケットを中継するようにUbuntuを設定する
 
コマンドで一時的に設定を有効化したい場合。(リブートすると消える)
sysctl -w net.ipv4.ip_forward=1
 
ブート時から設定を有効にしたい場合、次のファイルを編集
/etc/sysctl.conf
 
このファイルに次の行があるので、頭に付いている#を削除し再起動。
net.ipv4.ip_forward=1
 
これでフォワーディングはしてくれるが、IP変換をしてもらわないと
応答が返ってこない
 
以下のコマンドを実行しIPマスカレード変換を有効にする
 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.100/24 -j MASQUERADE
反映させるために以下のコマンドを実行

/etc/init.d/iptables save

/etc/init.d/iptables restart


これでゲストOSからも自由に外部ネットワークに
接続ができるうようになります
 
今回はホストOSにルーティングを行わせる設定にしたけど、
ゲストとホストの物理インタフェース間をブリッジ接続すれば
ルーティングはいらなかったはずです
次にはそちらの方法で試してみたいと思います
 
ペタしてね