与えられたもの:Linux(CentOS 5.x)を実行しているコンピューター、LANスイッチに接続された1枚のネットワークカード、クロスオーバーケーブルを介してケーブルモデムに接続された2枚目のカード。このコンピューターは、ローカルネットワークのルーター/ファイアウォール/トラフィックシェーパーとして機能します。
コンピューターは、DHCPを介してISPからパブリックIPアドレスを取得します。 ISPがクライアントに2つのIPアドレスを提供できることを知っています(ケーブルモデムがハブに直接接続されている場合など)。 ISPに接続されている1台のコンピューターで2つのIPアドレスを取得したいと思います。これにより、トラフィックの分離、NATおよびシェーピングが簡素化されます。
私はおそらくDHCP要求を「偽造」して、これを行ういくつかのスクリプトをまとめることができることを知っていますが、誰かがより簡単で適切な方法を知っているかどうか疑問に思います。
質問:LinuxコンピューターにDHCP経由で2つのIPアドレスを要求させ、両方を1つのネットワークカードに割り当てるにはどうすればよいですか?
DHCP応答は、要求しているインターフェイスのMACアドレスに基づいており、単一の物理インターフェイスを使用しているため、答えは「できません」です。これを行う唯一の方法は、スクリプトを使用することです。
おそらく次のようなものです(プライマリで定義されたサブインターフェイスを使用):
後で自動的に実行されないように、dhcpクライアントを強制終了します。与えられたIPアドレスのリース時間を計算し、リースの期限が切れる前にこのスクリプトを再度実行するようにスケジュールします。
更新
このためには、iproute2をインストールする必要があります。次のコマンドは、既存のeth0インターフェイスにバインドされた仮想インターフェイスを追加します。
ip link add link eth0 address 00:11:22:33:44:55 virtual0 type macvlan
インターフェースのmacと「virtual0」の名前を好きなものに置き換えます。それをオン:
ip link set virtual0 up
次に、必要に応じてdhcpd、dhclient、またはifconfigを使用して構成します。私はこれをDebiansqueezeでテストしました-あなたのディストリビューションはカーネル(特にmacvlan)で必要なすべてを有効にしていないかもしれません。
@JesseChisholmが提案したように、複雑なネットワーク設定を行うよりも、DHCPサーバーに正しいことを尋ねる方がはるかに簡単です。
OpenWRTの場合、次のように実行できます。
# udhcpc -i eth0:1 -x 0x3d:0100BEEFC0FFEE
その結果、同じdhcpサーバーから2つのIPアドレスが取得されました。
0x36は、クライアントIDオプションであるオプション61です。 :の後に16進バイトオプションがあります。これはudhcpcのヘルプオプションから来ました:
# udhcp --help
BusyBox v1.22.1 (2014-10-08 16:34:50 HKT) multi-call binary.
Usage: udhcpc [-fbqRB] [-t N] [-T SEC] [-A SEC/-n]
[-i IFACE] [-s PROG] [-p PIDFILE]
[-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...
...
-x OPT:VAL Include option OPT in sent packets (cumulative)
Examples of string, numeric, and hex byte opts:
-x hostname:bbox - option 12
-x lease:3600 - option 51 (lease time)
-x 0x3d:0100BEEFC0FFEE - option 61 (client id)