回答:
これは、2つのDHCPクライアントが異なるMACアドレスを使用している場合にのみ可能です。つまり、単一のMACアドレスを持つ同じ物理ネットワークインターフェイスで両方を実行することはできません。
ソリューションは、Linuxの仮想MAC-VLANネットワークインターフェイスです。MAC-VLANインターフェースは、物理インターフェースに裏打ちされた仮想ネットワークインターフェースですが、MAC-VLANデバイスの作成時にランダムに生成される異なるMACアドレスを使用します。
物理インターフェイスを使用してMAC-VLANインターフェイスを作成したら、物理インターフェイスと同じように使用します。特定のケースでは、物理インターフェイスで1つのDHCPクライアントを実行し、MAC-VLANデバイスで別のDHCPクライアントを実行できます。各デバイス(物理およびMAC-VLAN)は、独自のIPアドレスを持つことができます。
実行macvlan0
することにより、新しいMAC-VLANデバイスを作成できます。eth0
ip link add dev macvlan0 link eth0 type macvlan
実行することで削除できます
ip link delete dev macvlan0
ネットワーク構成ソフトウェア(http://code.google.com/p/badvpn/wiki/NCD)を使用して、次のNCDプログラムはeth0
(macvlan0
およびmacvlan1
)から2つのMAC-VLANデバイスを作成し、それぞれでDHCPを実行し、取得したIPアドレスを割り当てます。ルートやDNSサーバーの追加など、他のことも簡単に行えます。興味のある方はNCDページを読んでください。
process lan {
# Set device.
var("eth0") dev;
# Wait for device to appear, set it up, and wait for cable to be plugged in.
net.backend.waitdevice(dev);
net.up(dev);
net.backend.waitlink(dev);
# Start DHCP's.
provide("lan-link");
}
process lan_dhcp1 {
# Wait for link.
depend("lan-link") linkdep;
# Choose virtual device name.
var("macvlan0") vdev;
# Create virtual MAC-VLAN device.
list("/sbin/ip", "link", "add", "dev", vdev, "link", linkdep.dev, "type", "macvlan") do;
list("/sbin/ip", "link", "delete", "dev", vdev) undo;
run(do, undo);
# Set virtual device up.
net.up(vdev);
# DHCP configuration on virtual device.
net.ipv4.dhcp(vdev) dhcp;
ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
ifnot(test_local);
println(vdev, ": got address ", dhcp.addr);
# Assign address to virtual device.
net.ipv4.addr(vdev, dhcp.addr, dhcp.prefix);
}
# This differs from above only in interface name (macvlan1).
process lan_dhcp2 {
# Wait for link.
depend("lan-link") linkdep;
# Choose virtual device name.
var("macvlan1") vdev;
# Create virtual MAC-VLAN device.
list("/sbin/ip", "link", "add", "dev", vdev, "link", linkdep.dev, "type", "macvlan") do;
list("/sbin/ip", "link", "delete", "dev", vdev) undo;
run(do, undo);
# Set virtual device up.
net.up(vdev);
# DHCP configuration on virtual device.
net.ipv4.dhcp(vdev) dhcp;
ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
ifnot(test_local);
println(vdev, ": got address ", dhcp.addr);
# Assign address to virtual device.
net.ipv4.addr(vdev, dhcp.addr, dhcp.prefix);
}
最終的にmacvlan0
、macvlan1
それぞれが独自のDHCPで取得したIPアドレスをeth0
持ち、IPアドレスを持たないアップ状態になります。または、MAC-VLANインターフェイスを1つだけ作成し、eth0
それ自体で1つのDHCPインスタンスを実行できます。
確かなことはわかりませんが、オープンソースのルーターがない限り、静的IPを使用して必要なことを行う必要があると思います。IMOは、あなたがやりたいことを本当に正当な理由がない限り、DHCPに固執します。あなたの質問から私はあなたが望むものを見るので、誰かがそれを行う方法を知らない限り、私は誰かがより良い答えを与えるまで待ってDHCPにとどまります。ネットワーク上に1-2個以上しかなく、プリンタ(メディアエクステンダーなど)を何も持っていない場合、静的IPをIDKとして使用しないか、静的IPでこれらのアイテムを設定することは可能ですか?もしかしたら、オープンソースのルーターを手に入れれば、あなたがやりたいことをできるかもしれませんし、MACアドレスを使ってそれを識別し、そのIPを設定する方法としてあなたのマシンに静的IPを使うようにしたいかもしれません。ネットワークの残りの部分はDHCPを使用できません。IDKは私が一度もやったことがないので、私はただアイデアを捨てているだけなので、答えが得られないことを残念に思います。Bryanによって提示されたリンクは、DHCPと静的IPの問題に関する優れたリソースのように見えますが。また、オープンソースのルーターについては、NetgearとD-Linkがそれらを作ると私は確信していますが、IMOはこれら2つのブランドが私が選択するものです。私は個人的にLinksysを小説で買ったので好きではありません(彼らはIMOではなくより良いと思うでしょう。個人的には、私が見つけた最もカスタマイズ可能なルーターであるDリンクを好みます。)また、オープンソースのルーターについては、NetgearとD-Linkがそれらを作ると私は確信していますが、IMOはこれら2つのブランドが私が選択するものです。私は個人的にLinksysを小説で買ったので好きではありません(彼らはIMOではなくより良いと思うでしょう。個人的には、私が見つけた最もカスタマイズ可能なルーターであるDリンクを好みます。)また、オープンソースのルーターについては、NetgearとD-Linkがそれらを作ると私は確信していますが、IMOはこれら2つのブランドが私が選択するものです。私は個人的にLinksysを小説で買ったので好きではありません(彼らはIMOではなくより良いと思うでしょう。個人的には、私が見つけた最もカスタマイズ可能なルーターであるDリンクを好みます。)
また、このリンクをチェックしてください。サポートされている場合は、ルーターでさらに多くのことができるかもしれません。