Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

仮想NIC

433 views
Skip to first unread message

かさはら みつお

unread,
Jun 12, 2008, 5:06:36 AM6/12/08
to
笠原と申します。

何をすれば出来るのか見当がつかず、皆様のお知恵を拝借出来ればと思いメール
させていただきます。

■ やりたいこと
物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
別のMACアドレスで使用したい。

■ やってみてダメだったこと
・aliasを使う
 IPアドレスに関しては良いのですが、eth0とeth0:0が同一MACアドレスでしか
運用出来ないのでボツ

・vlanを使う
 vlanを使うと、vlanインタフェースに個別にMACアドレスを指定できたので、
ほぼやりたいことに近いことは出来たのですが、NICから出てくるパケットがTag
付きになってしまうので、別途Tag VLAN(802.1Q)に対応したスイッチを入れる必
要がありボツ
 →vlanインタフェースで、untag運用出来る方法があればこの問題は解決するの
  ですが

・Bridgeモジュールを使う
 bridgeにIPアドレスを振って、さらにbridgeに個別にMACアドレスを振れる所
まではよかったのですが、残念ながらeth0を2つのbridgeに参加させる事が出来
ず、物理的にNICが2枚必要になってしまうのでボツ
 →厳密にはbridgeにはMACアドレスを直接は設定出来なかったのですが、bridge
  に参加させるNICのMACアドレスを任意のMACにifconfigコマンドで設定して
  から参加させたら、bridgeのMACアドレスが変更出来ました。

・dummyを使う
正しいか分からないのですが
drivers/net/dummy.cの
static int numdummies = 1;

static int numdummies = 2;
に書き換えてkernelをコンパイルしたら、とりあえずdummyインタフェースが2個
作れて、個別のIPアドレスとMACアドレスを振ることができたのですが、これを
eth0で通信させる為にbridgeにeth0/dummy0/dymmy1をaddifしても残念ながら外
部のノードと通信出来ませんでした。
そもそもdummyモジュールはloopback専用だから、bridgeに参加させても外部と
は通信出来ない仕様?

ということで現在手詰まりになってしまっています。

そもそも、今回やりたいことをやるのが、どの方法を使うのが正しいのか分かっ
ていないので、本来できるはずの事が私の定義ミスで出来ていないのか、そもそ
も出来ないことなのか分からず、皆様のお知恵を拝借出来ませんでしょうか。

--
かさはら みつお <m.kasa...@gmail.com>

YOSHIFUJI Hideaki / 吉藤英明

unread,
Jun 12, 2008, 5:21:03 AM6/12/08
to
In article <20080612180557.7a3...@gmail.com> (at Thu, 12 Jun 2008 18:06:36 +0900), かさはら みつお <m.kasa...@gmail.com> says:

> ■ やりたいこと
> 物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
> 別のMACアドレスで使用したい。

:


> そもそも、今回やりたいことをやるのが、どの方法を使うのが正しいのか分かっ
> ていないので、本来できるはずの事が私の定義ミスで出来ていないのか、そもそ
> も出来ないことなのか分からず、皆様のお知恵を拝借出来ませんでしょうか。

MAC-VLAN?

--yoshfuji

TANAKA Masayuki

unread,
Jun 12, 2008, 5:58:22 AM6/12/08
to
こんにちは田中です

> ■ やりたいこと
> 物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
> 別のMACアドレスで使用したい。

VRRPとかの技術はどうでしょうか?

たなか

かさはら みつお

unread,
Jun 12, 2008, 9:36:39 AM6/12/08
to
笠原です。

On Thu, 12 Jun 2008 18:39:05 +0900
"Jia Lu" <rok...@gmail.com> wrote:

> こんにちは
> NICにマルチIPを振るのはIP alias使えば出来ると思います(255IPまで)
> 複数のMACを持たせるのは多分不可能じゃないかと思います。
>
> Kernelのbonding技術を有効にすることで対応できるかどうかですね。
> (sunとciscoではそれぞれTrunkingとetherchannelと呼んでいる技術です。)
> Kernelの再構築でBonding driver supportを有効にすることで使えます。
> 一般的にロードバランザの機能を使う時有効にしますが。

ぉお!bondingも仮想インタフェース作れますよね!忘れていました!
ということで実験したのですが、bond0とbond1を作成して、bond0のslaveにeth0
を指定した後でbond1のslaveもeth0に設定しようとすると

# ifup bond1
Illegal operation: The specified slave interface 'eth0' is already a
aslave Master 'bond1', Slave 'eth0': Error: Enslave failed
bonding: bond0: link status definitely down for interface eth0,
disabling it
bonding: bond0: now running without any active interface !
#

となってしまい、複数のbondインタフェースで1つの物理NICを共用するのは無
理っぽい感じでした。

--
かさはら みつお <m.kasa...@gmail.com>

Ryuji MATSUMOTO

unread,
Jun 12, 2008, 9:49:50 AM6/12/08
to
松元です。

>■ やりたいこと
>物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
>別のMACアドレスで使用したい

ご希望に添えるないようかはわかりませんが、XenがBridgeでほぼ同等の事をやっ
ていたような気がします。XenのゲストOSは個々に別々のIPアドレス・MACアドレス
を持つ事が出来ます。

当然ながらXenのホストOSにはNICが一枚しかないですよ。

注: 同じOS内で二つのIPアドレス・MACが使えるわけではありません。

何かヒントになるかもしれませんのでXenの実装を調べてみてはいかがでしょうか。


かさはら みつお

unread,
Jun 12, 2008, 6:40:27 PM6/12/08
to
こんにちは

未だ実機では実験していないのですがkeepalivedのVRRP機能がたくさんgoogleで
引っかかるようなので、今週末実験してみます。

--
かさはら みつお <m.kasa...@gmail.com>

かさはら みつお

unread,
Jun 12, 2008, 6:44:08 PM6/12/08
to
こんにちは

On Thu, 12 Jun 2008 22:49:50 +0900
"Ryuji MATSUMOTO" <matu...@pluto.ai.kyutech.ac.jp> wrote:

> 松元です。
>
> >■ やりたいこと
> >物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞ
> >れ別のMACアドレスで使用したい
>
> ご希望に添えるないようかはわかりませんが、XenがBridgeでほぼ同等の事を
> やっていたような気がします。XenのゲストOSは個々に別々のIPアドレス・MAC

> アドレスを持つ事が出来ます。
>
> 当然ながらXenのホストOSにはNICが一枚しかないですよ。
>
> 注: 同じOS内で二つのIPアドレス・MACが使えるわけではありません。
>
> 何かヒントになるかもしれませんのでXenの実装を調べてみてはいかがでしょ
> うか。

そうですそうです!
私はXenではなくてVMwareなんですが(Xenが動く高級なCPUを持っていない)、ゲ
ストOSの使っているbridge NICをホストOSで使えれば良いのですが、ちょっと
コードを自分で読み書き出る腕が私には欠如しているのでどうにかならんもの
かと。。。

--
かさはら みつお <m.kasa...@gmail.com>

Katsushi Sakurane

unread,
Jun 12, 2008, 8:00:35 PM6/12/08
to
桜根です。

2008/06/12 の 18:06:36 頃 かさはら みつお さんが書いた
「[linux-users:108024] 仮想NIC」
<<20080612180557.7a3...@gmail.com>>
についての返信です。

>■ やりたいこと
>物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
>別のMACアドレスで使用したい。

何故これをやりたいのかが思いつかないのですが、通信相手に違うMAC
アドレスで見せたいだけであれば、例えば片方の仮想NICの通信をルータ
経由にしてNAT変換するとか。

+---ルータ---+
| |
PC --+ +---通信相手
| |
+------------+


というわけで、「何故それをしたいのか?」も提示すれば、もしかしたら
全く異なるアプローチの解決案も出てくるかもしれませんよ。
目的と手段は混同しない方が良いと思います。


仮想NICに振る2つ目のIPアドレスが物理NICに振られるIPアドレスと
同じサブネットなのか違うサブネットなのかでも考え方が異なるかな。


--
桜根 克至 (さくらね かつし)
e-mail : sakurane @ jp.fujitsu.com


Akinori AIZAWA

unread,
Jun 12, 2008, 11:01:14 PM6/12/08
to
<BAY120-DAV3F437FDC...@phx.gbl>の記事において
JST時間2008年06月13日(金)10時02分35秒頃、lyj...@hotmail.comさんは
書きました。

| 呂です。


| > ■ やりたいこと
| > 物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
| > 別のMACアドレスで使用したい。
| >

| 物理的にひとつのNICに二つのMACを使用するのは無理です。

実際にやっているものもあるのですけど…

とりあえず、

| このMACがNICメーカーがHardに書き込んだ情報で、出荷した
| 時点から変更できない、設定出来ないものです。

は、明らかに間違いですね。

see) man ifconfig


--
会沢 昭則 あ☆WP Akinori AIZAWA | Packet Radio User's Group.
no...@awp.dhis.prug.or.jp (home) | Saitama Pref. Saitama City.
a.ai...@ntt.com (office) | Ham Radio Station : JP1AWP

早間義博

unread,
Jun 12, 2008, 11:18:55 PM6/12/08
to
早間です。

> 呂です。


> > ■ やりたいこと
> > 物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
> > 別のMACアドレスで使用したい。
> >

> 物理的にひとつのNICに二つのMACを使用するのは無理です。
> このMACがNICメーカーがHardに書き込んだ情報で、出荷した
> 時点から変更できない、設定出来ないものです。
>

検索で拾って来たプログラムですが添付のプログラムで MAC の変更は出来
ます。中にある MAC は VMware のものです。

松元さんも仰っていますが私は VMware で物理的には 一つの NIC で複数
の MAC と xx.xx.xx.00/24 に属する複数の IP アドレスを親機、仮想機
で使用しています(Bridge 機能です。)。

linux の機能として comand library として実現されているとは
思っていませんが(??)
(1) 送出するパケットの MAC と IP を書き換える。
(2) ARP の問いかけにしかるべき MAC を答える
様な機能を tcpdump と同じように Promiscast モードの NIC に対して
実行すれば可能かと思います。

VMware では NIC が wireless の場合は複数の IP に対して一つの MAC
を適用して通信を行っています。つまり、異なった2つ以上の IP に対して同じ
MAC を ARP で返しているのです。
(linux-2.6.23 まで、linux-2.6.24 以降はこの機能を確認していません)。

当然の事ですが VMware では仮想機は(まるで)独立した NIC を持って
いるように働きます。

所詮は「プログラム仕事」ですから、送出・受信パケットを制御するだけ
なのですが、
一つの OS の中では他の機能との関連もあり大変かと思います。

目的に合うか否かは別として、私なら、2以上の仮想機を作成し、必要な
OSをインストールして実現します。

---------------------------- ここから ---------------------------
#include <stdio.h>
#include <string.h> /* for strncpy */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <net/if_arp.h>
int main()
{
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
/* ethernetである */
ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
/* 変更するMACアドレス値 */
/* 00:50:56:C0:00:01 */
ifr.ifr_hwaddr.sa_data[0] = 0x00;
ifr.ifr_hwaddr.sa_data[1] = 0x50;
ifr.ifr_hwaddr.sa_data[2] = 0x56;
ifr.ifr_hwaddr.sa_data[3] = 0xc0;
ifr.ifr_hwaddr.sa_data[4] = 0x00;
ifr.ifr_hwaddr.sa_data[5] = 0x01;
/* eth0を変更 */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
/* MACアドレス変更 */
if (ioctl(fd, SIOCSIFHWADDR, &ifr) != 0) {
/* 失敗したら理由を表示 */
perror("ioctl");
}
close(fd);
return 0;
}
---------------------------- ここまで ---------------------------

-- 早間 yo...@yedo.src.co.jp

早間義博

unread,
Jun 12, 2008, 11:43:43 PM6/12/08
to
早間です。
>
> > 呂です。
> > > ■ やりたいこと
> > > 物理的には1つのNIC(Ethernet)に、2つのIPアドレスを振り、なおかつそれぞれ
> > > 別のMACアドレスで使用したい。
> > >

"ifconfig multi mac" で検索したら
Primiano Tucci :: MultiMac - Linux multiple MAC address network tool
http://www.primianotucci.com/default.php?view=57
と言うのが出てきました。

-- 早間

Mitsuo KASAHARA

unread,
Jun 13, 2008, 1:35:55 AM6/13/08
to
笠原です。

どうもありがとうございます!
根本的に英語がダメなので、"ifconfig multi mac"という検索キーワードが
出てきませんでした。

未だ実機でテストはしていないのですが、サイトの説明文を読む限り
これが私のやりたいことを一発で出来るソリューションのような気がします。

動かしたらまたメールさせていただきます。

08/06/13 に 早間義博<yo...@yedo.src.co.jp> さんは書きました:


--
かさはら みつお <m.kasa...@gmail.com>

Mitsuo KASAHARA

unread,
Jun 13, 2008, 1:40:59 AM6/13/08
to
笠原です。

08/06/13 に 早間義博<yo...@yedo.src.co.jp> さんは書きました:

> 目的に合うか否かは別として、私なら、2以上の仮想機を作成し、必要な
> OSをインストールして実現します。

おっしゃるとおりで、現在はVMwareを使ってホストOSと仮想OS2個で合計3台分の
ノードを作成しているのですが、いかんともしがたくメモリリソースが大食いで
勿体なく、何とかしてホストOSだけで複数のNICをエミュレートできないかと
悩んでいたのです。

--
かさはら みつお <m.kasa...@gmail.com>

Mitsuo KASAHARA

unread,
Jun 13, 2008, 1:51:20 AM6/13/08
to
笠原です。

08/06/13 に Katsushi Sakurane<saku...@jp.fujitsu.com> さんは書きました:


> 何故これをやりたいのかが思いつかないのですが、通信相手に違うMAC
> アドレスで見せたいだけであれば、例えば片方の仮想NICの通信をルータ
> 経由にしてNAT変換するとか。

実システムというよりは、本番システムの試験環境を作るためです。
実システムでは3台のサーバがあるのですが、実態は
Webサーバ
DNSサーバ
Mailサーバ
の3台でして、試験環境構築をするのにあたり、1台のサーバに全て
載せたい(設備の問題で)と思い、何とかならないかなということです。
#というか、会社の仕事としては、会社で設備そろえてやることになったんで
 とりあえずどうでも良いのですが、出来ないかなぁ?と思って手を付けて
 出来ないままで悔しいので、家で遊んでいたのですが、どうしても出来ず
 ムキになっているのが実情です:-)

> というわけで、「何故それをしたいのか?」も提示すれば、もしかしたら
> 全く異なるアプローチの解決案も出てくるかもしれませんよ。
> 目的と手段は混同しない方が良いと思います。

そうですね。
ということで、実環境に近づける為に1枚のNICに複数のIPアドレスと、
それぞれのIPアドレスに別のMACアドレスを振ること自体が
目的となっております。

--
かさはら みつお <m.kasa...@gmail.com>

TANAKA Masayuki

unread,
Jun 13, 2008, 2:15:37 AM6/13/08
to
こんにちは田中です。

> そうですね。
> ということで、実環境に近づける為に1枚のNICに複数のIPアドレスと、
> それぞれのIPアドレスに別のMACアドレスを振ること自体が
> 目的となっております。

2000円前後のUSB-LANアダプタを使うのもいいのかもしれません。
前提壊してしまってなんですが、何個か持っていると検証が楽だと思いますよ

たなか

Katsushi Sakurane

unread,
Jun 13, 2008, 2:40:57 AM6/13/08
to
桜根です。

# 引用が前後します。

2008/06/13 の 14:51:20 頃 Mitsuo KASAHARA さんが書いた
「[linux-users:108039] Re: [linux-users:108032] Re:仮想NIC」
<<a61b7f800806122251n740...@mail.gmail.com>>
についての返信です。

>> 目的と手段は混同しない方が良いと思います。
>
>そうですね。
>ということで、実環境に近づける為に1枚のNICに複数のIPアドレスと、
>それぞれのIPアドレスに別のMACアドレスを振ること自体が
>目的となっております。

元々の目的は
「1台のサーバ上に3台分の環境を乗せてテストしたい」
ですよね。
そして、その手段として「笠原さんが考えた方法」が
「1枚のNICに複数のIPアドレスを振り、それぞれ別のMACにした」
だと思います。

だから、「目的と手段は混同しない方が良い」と書いたのでした。

でもメールを読ませて頂くと、
「出来ないままで悔しいので、家で遊んでいたのですが、どうしても
 出来ずムキになっているのが実情です:-)」
と書かれているので、手段が目的化しているのですね~。
その気持ち分かります。(^_^;


さて、元に戻って。

>実システムでは3台のサーバがあるのですが、実態は
>Webサーバ
>DNSサーバ
>Mailサーバ
>の3台でして、試験環境構築をするのにあたり、1台のサーバに全て
>載せたい(設備の問題で)と思い、何とかならないかなということです。

であれば、VMware Server使うのが一番簡単ではないですか?

試験環境でのWeb/DNS/Mailくらいであれば、そんなにメモリを食う
アプリではなさそうですから、1GB程度のメモリを積んだパソコンで
あれば十分動きそうです。(実OS + 256MB×2 の仮想OS作る感じ)

今どき1GB程度のメモリであれば、1千円台で買えますよね。

Jia Lu

unread,
Jun 13, 2008, 3:29:37 AM6/13/08
to
これで試してみてください。
http://www.primianotucci.com/default.php?view=57

2008/6/13 Mitsuo KASAHARA <m.kasa...@gmail.com>:

Katsushi Sakurane

unread,
Jun 13, 2008, 3:55:22 AM6/13/08
to
桜根です。

2008/06/13 の 15:40:57 頃 Katsushi Sakurane さんが書いた
「[linux-users:108041] Re: 仮想NIC」
<<200806131540...@smtp-a.css.fujitsu.com>>
についての返信です。

>であれば、VMware Server使うのが一番簡単ではないですか?

すいません。
他のメールを見ずに返信してしまいました。
現在VMwareを使っているのですね。

余計なメールでした。。。

西端 敏裕

unread,
Jun 13, 2008, 10:13:56 PM6/13/08
to
手段 -> 目的化&既に解決。ということなのですが、
少しばかりチャチャを。

Mitsuo KASAHARA さんは書きました:


>> というわけで、「何故それをしたいのか?」も提示すれば、もしかしたら
>> 全く異なるアプローチの解決案も出てくるかもしれませんよ。
>> 目的と手段は混同しない方が良いと思います。
>
> そうですね。
> ということで、実環境に近づける為に1枚のNICに複数のIPアドレスと、
> それぞれのIPアドレスに別のMACアドレスを振ること自体が
> 目的となっております。

どうして IP アドレスごとに個別に MAC アドレスが
欲しかったのでしょうか?

別に MAC アドレス関係ないじゃん?と思うのですけど。

--
西端 敏裕

早間義博

unread,
Jun 13, 2008, 10:49:18 PM6/13/08
to
早間です。
チャチャにチャチャを

>
> どうして IP アドレスごとに個別に MAC アドレスが
> 欲しかったのでしょうか?
>
> 別に MAC アドレス関係ないじゃん?と思うのですけど。
>

「MAC アドレス関係ない」と思わない人がいて、
multimac.tar.gz が作成され、
笠原さんも望みが叶ったのでしょう。

私には同一 NIC に複数の MAC を割り当てると言う望みはありませんが、
出来るとなれば、異なった展開もあり得ます。

ip alias では IP ごとの traffic は把握できません。
(ip ごとに把握しようとは思っていませんが)この機能を使用すれば出来
るように思います。

しかし、私の耳は「馬の耳」みたいです。価値が判るようになりたいものです。

-- 早間

Mitsuo KASAHARA

unread,
Jun 14, 2008, 12:44:25 AM6/14/08
to
笠原です。

うーん、最初にこの環境が欲しかった理由はとうの昔に消滅しているのですが
出きるとなれば個人的に「実験た~いむ」したいのが

・L2チャネルの負荷分散度合い調査の実験用
・実装依存で泣かされるARPのエージングに関する調査/実験用の道具
・DHCPサーバの負荷試験機とかにも応用が効きそう

・・・、ま、IPアドレスだけではなく、いざとなればMACアドレスも
任意に制御下に置くことが出来るというのは良い事ではないかと思うのですが(笑)
何事も、出来ないよりは出来た方が良いということで。

2008/06/14 11:13 西端 敏裕 <tosh...@ybb.ne.jp>:

アプリ層から見れば、下手をすればIPアドレスどころか、DNSさえ何とかすれば
ホスト名を持って歩ければIPアドレス何でも良いんじゃない?
となると思いますけど、それでもやっぱりIPアドレス関係あるのと同じレベルで
MACアドレスをちょこちょこ弄れると「ニヤリ」とする事があります。

--
かさはら みつお <m.kasa...@gmail.com>

0 new messages