(大)アドレスのブロックをインターフェイスにバインドできますか?


26

ipツールを使用すると、複数のアドレスをインターフェイスにバインドできることがわかります(たとえば、http://www.linuxplanet.com/linuxplanet/tutorials/6553/1/)。ただし、今はIPv6の上に何かを構築しようとしています。アドレスのブロック全体(たとえば、/ 64)を使用可能にしておくと、プログラムが範囲から任意のアドレスを選択でき、それにバインドします。言うまでもなく、この範囲のすべてのIPをインターフェイスに接続するには時間がかかります。

Linuxは、アドレスブロック全体をインターフェイスにバインドすることをサポートしていますか?


異なるディストリビューションには、これを処理する異なる方法があります。一つを選ぶ。
イグナシオバスケスエイブラムス

今のところUbuntuですが、もちろん、ディストリビューション間で機能するソリューションが好まれています。
p-static

このチュートリアルでは、ブロック内の単一のアドレス(/ 24)をバインドします。/ 24は、どのブロックにあるかを指定するだけです。IPv6でも同じように機能するはずです。
BillThor

クロスディストリビューションは、「ip addr add」を使用するスクリプトを記述することです。レッドハット、UbuntuとSuSEの異なるネットワークスクリプトを持っている...
ショーンReifschneider

1
@ChandraNakka これは便利ですか?
カスペルド

回答:


31

呼ばれる機能を経由してのLinux 2.6.37と上記サポートするこのAnyIP。たとえば、私が実行した場合

ip route add local 2001:db8::/32 dev lo

Ubuntu 11.04マシンでは、2001:db8 :: / 32ネットワークのすべてのアドレスで接続を受け入れます。


1
ipv4用のAnyIPソリューションはありますか?
Coaku

Ubuntu 14.04で動作しますか?
チャンドラナッカ

これは機能しているように見え、アドレスの範囲をpingできますが、実行したとき、ip route listまたはip -6 route list追加されたルートが表示されません。AnyIPアドレスブロックをどのように列挙しますか?
コルトン

これはローカルのアドレスに対して機能しますが、外部ソースからこれらのIPにpingを実行したりアクセスしたりすることはできません。それを修正する方法はありますか?(loをeth0に置き換えようとしましたが、何も到達できませんでした)
-BrainStone

@BrainStoneは、そのためにndppdをインストールするか、プロバイダーからルーティングされるプレフィックスを取得する必要があります
Arya

6

はい、Linuxはネットワークアドレスのブロックをネットワークインターフェースにバインドすることをサポートしていますが、ループバックインターフェースでのみです。だからあなたはこれを行うことができます:

ip addr add 192.168.5.0/24 dev lo

そして、これを行います:

$ nmap -sP -oG - 192.168.5.0/24

# Nmap 5.21 scan initiated Tue Dec  7 11:38:28 2010 as: nmap -sP -oG - 192.168.5.0/24 
Host: 192.168.5.0 ()    Status: Up
Host: 192.168.5.1 ()    Status: Up
Host: 192.168.5.2 ()    Status: Up
[...]
Host: 192.168.5.254 ()  Status: Up
Host: 192.168.5.255 ()  Status: Up
# Nmap done at Tue Dec  7 11:38:46 2010 -- 256 IP addresses (256 hosts up) scanned in 0.11 seconds

適切なルートを適切に配置すると、IPv4アドレスに対して必要な処理が行われます。IPv6について質問しましたが、IPv6の経験はありませんが、IPv6が同じように機能する可能性は十分にあります。

私はもともとここでこの記事を読みました(記事の最後に向かって)。この記事では、これまで知らなかったCentOS / Red Hatの機能を使用して、インターフェイスに複数のアドレスを明示的に割り当てる方法についても説明します。


クール!Ubuntu(Lucid&Hardy)のIPv6でこれを試しましたが、運はありません。これはIPv6のキラー機能だと思います。アドレスをデータベースオブジェクトにマッピングしたり、アドレスをセッションIDとして使用したりできます。
ジェラルドコームズ

2
いいえ、loにアドレスを追加しないでください。代わりに、ルートを追加しますip -6 route add local <ip> dev lo
ネイビン

2

そのため、ここにいくつかのオプションがあります。

  1. スクリプトを使用して、アドレスをすべて個別にインターフェイスにバインドします

  2. 目的のブロックをマシンの単一アドレスにルーティングし、そのマシンにpcapインターフェースを使用して、そのブロックのすべてのトラフィックを(ルーターのように)代行受信させて処理させます。

  3. NATルールでかなりのトリックを実行して、1つのマシンにルーティングされたIPのブロックをそのマシンの単一の内部IPに書き換えることができます...解決策1に戻ります。

私があなただったら、私はオプション1で小さなスクリプトを記述するかのいずれかを使用したい、ここで

#!/bin/sh
if [ "$#" -ne "4" ]; then
        echo Usage:
        echo " $0 interface ip range netmask"
        echo " examples:"
        echo "  1) Assuming you want to bind the IP range 192.168.0.1..192.168.0.254 to eth0 with netmask 255.255.255.0:"
        echo "  $0 eth0 192.168.0. 1..254 255.255.255.0"
        echo "  2) Assuming you want to bind the IPv6 range 2001:41d0:1:5000::1-2001:41d0:1:5000::254 to eth0 with netmask /56"
        echo "  $0 eth0 2001:41d0:1:5000:: 1..254 56"
else
        echo "Attempting to assign the IP range $2($3) to interface $1 with netmask $4"
        for ip in $(eval echo "{$3}"); do ifconfig -v $1 add $2$ip netmask $4; done
fi

このようなスクリプトはどこに名前が付けられますか?
スカペレン

2

他の人が言ったように、AnyIPメカニズムを使用して、サブネット全体の到着パケットをlocalhostインターフェースにルーティングできますが、アップストリームルーターを使用して、すべての目的のパケットをこのマシンにルーティングする必要があることに注意してください最初の場所。これは、ルーター上のルーティングテーブルエントリを使用するか、BGPを介して簡単に実行できます。ARPは、IPごとに個別にARPする必要があるため、実際には適切ではありません。


1

上記の「Anyip」は、centos 7では機能しませんでした。ブート時にipv6アドレスを手動で作成するスクリプトを作成する必要がありました。そうするために、次を/ etc / crontabに追加しました:

@reboot root /path/to/bashscript

約3000個のipv6アドレスを作成するbashスクリプトは次のとおりです。

#!/bin/bash
INETP="2a00:xxxx:xxxx:xxxx::"
PRE="64"
INTE="eth0"
IP1=/sbin/ip
echo -n "Adding IPv6 addresses..."
for i in {3..3000}
do
$IP1 -6 addr add ${INETP}$(printf '%x\n' $i)/${PRE} dev ${INTE}
done
echo "Done!"

この方法は、約4000のアドレスに到達するまで機能しません。それよりも多くのアドレスを設定しようとすると、動作しません。単一のホストに/ 96または/ 64全体を割り当てることが望ましいシナリオがありますが、これまでの方法でスケーリングする方法はありません。
カスペルド

上記のGerald Combsによって「説明された」いわゆるanyipメカニズムをCentos 7またはDebian 8で動作させることができる@kasperdですか?
ニコラスゲリネット

1
はい、動作します。しかし、その答えで述べられているよりもいくつかのステップがあります。同様の質問に対する私の答えをご覧ください。
カスペルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.