オーバーラップネットワーク用のARP-Proxy-Scape

ルーターのインターフェイスでは、ネットワーク10.0.0.0/8は、ネットワーク10.0.0/8:10.0.1.0/24および10.0.2.0/24の同じルーターの他のインターフェイスで同時に使用されます。 At the same time, there is not a single host from networks 10.0.1.0/24 and 10.0.2.0/24 on the network 10.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0/24.

問題は、ネットワーク10.0.0.0/8のホストがネットワーク10.0.1.0/24を備えた1つの放送セグメントにあると考えているため、ネットワーク10.0.1.0/24および10.0.2.0/24のネットワーク10.0.1.0/24および10.0.2.0/24のホストと通信できないことです。ホスト10.0.1.0/24および10.0.2.0/24のネットワークでは、誰も答えません。
ARPの例:
ARPリクエスト

ARP返信:

正しい決定No.たとえば、Juniper Arp-Proxyには2つの動作モードがあります。
制限 - スイッチは、ソースとターゲットの物理ネットワークが異なるARP要求に応答し、ソースとターゲットのIPアドレスが同じサブネット上にある場合、応答しません。このモードでは、プロキシARPなしで同じサブネットのホストが通信します。スイッチでこのモードを使用することをお勧めします。
無制限 - スイッチは、すべてのARPリクエストに応答し、目的地へのルートがあります。これはデフォルトモードです(スイッチ以外のJunos Operating System(Junos OS)構成のJuniper Networksのデフォルトモードです。スイッチで制限モードを使用してお勧めします。
Cisco Arp-Proxyでは、デフォルトモードがJuniperによって制限モードに含まれています。
制限モードのARP-Proxyは、送信者のIPアドレスと受信者のIPアドレスが同じネットワーク上にあるため、役に立ちません。 Arp-Proxyが問題を解決しますが、Arp-Proxyは重複するIPアドレスを決定するメカニズムによってトリガーされるため、問題は解決されますが、別のものが作成されます。無償のARPメッセージを送信すると、ホストはArp-Proxyから回答を受け取ります。
オプションNo. 3およびNo. 4は、L2レベルで1つのネットワークのホストを互いに分離し、ルーターインターフェイスのL3を介してホスト間の通信を削減し、ネットワーク機器の構成を変更する必要があり、独自の制限と機能もあります。
ARP -Proxyを書き込むオプションNo. 5 Python3とScapeを使用します。これは、ネットワークパッケージを操作するためのツールです。
Linuxを搭載した新しいホストをネットワーク10.0.0.0.0/8に接続し、ARP-Proxyを起動しました。ここでは、要求されたホストのIPアドレスが10.0.0.2.0/24に入るARP-Requestでパッケージを傍受し、10.0.0.0/8のGatewoowのMacアドレスにArp-Replyに応答します。その結果、ネットワーク向けのパッケージ10.0.1.0/24および10.0.2.0/24がネットワーク10.0.0.0/8のネットワークに送信され、宛先に配信されます。

log arp-proxy.pyの例:
2017-03-12 00:35:00,984 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,985 INFO STDOUT: ARP receive:
2017-03-12 00:35:00,985 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,986 INFO STDOUT: ###[ Ethernet ]###
2017-03-12 00:35:00,986 INFO STDOUT: dst = ff:ff:ff:ff:ff:ff
2017-03-12 00:35:00,986 INFO STDOUT: src = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,986 INFO STDOUT: type = 0x806
2017-03-12 00:35:00,987 INFO STDOUT: ###[ ARP ]###
2017-03-12 00:35:00,987 INFO STDOUT: hwtype = 0x1
2017-03-12 00:35:00,987 INFO STDOUT: ptype = 0x800
2017-03-12 00:35:00,987 INFO STDOUT: hwlen = 6
2017-03-12 00:35:00,987 INFO STDOUT: plen = 4
2017-03-12 00:35:00,988 INFO STDOUT: op = who-has
2017-03-12 00:35:00,988 INFO STDOUT: hwsrc = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,988 INFO STDOUT: psrc = 10.0.0.100
2017-03-12 00:35:00,988 INFO STDOUT: hwdst = 00:00:00:00:00:00
2017-03-12 00:35:00,988 INFO STDOUT: pdst = 10.0.1.55
2017-03-12 00:35:00,988 INFO STDOUT: ###[ Padding ]###
2017-03-12 00:35:00,989 INFO STDOUT: load = 'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: ARP send:
2017-03-12 00:35:00,989 INFO STDOUT: -----------------------------------
2017-03-12 00:35:00,989 INFO STDOUT: ###[ Ethernet ]###
2017-03-12 00:35:00,989 INFO STDOUT: dst = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,989 INFO STDOUT: src = 00:0c:29:85:7d:35
2017-03-12 00:35:00,990 INFO STDOUT: type = 0x806
2017-03-12 00:35:00,990 INFO STDOUT: ###[ ARP ]###
2017-03-12 00:35:00,990 INFO STDOUT: hwtype = 0x1
2017-03-12 00:35:00,990 INFO STDOUT: ptype = 0x800
2017-03-12 00:35:00,990 INFO STDOUT: hwlen = 6
2017-03-12 00:35:00,990 INFO STDOUT: plen = 4
2017-03-12 00:35:00,990 INFO STDOUT: op = is-at
2017-03-12 00:35:00,991 INFO STDOUT: hwsrc = 90:fa:3d:aa:bb:cc
2017-03-12 00:35:00,991 INFO STDOUT: psrc = 10.0.1.55
2017-03-12 00:35:00,991 INFO STDOUT: hwdst = e4:8d:8c:79:dc:2e
2017-03-12 00:35:00,991 INFO STDOUT: pdst = 10.0.0.100
2017-03-12 00:35:00,991 INFO STDOUT: -----------------------------------
環境では、Ubuntu Server 16.04 DistributionとSystemDファッショナブルを使用して、スクリプトをサービスとして起動します。
mkdir /opt/arp-proxy
cp ~/arp-proxy.py /opt/arp-proxy/
SystemDスクリプト設定を使用してファイルを作成します。
touch /lib/systemd/system/arp-proxy.service
arp-proxy.service
[Unit]
Description=arp-proxy for overlapped networks
[Service]
Type=simple
ExecStart=/opt/arp-proxy/arp-proxy.py enp4s0 00:05:00:05:00:05
StandardOutput=null
Restart=always
[Install]
WantedBy=multi-user.target
ARP-Proxyを起動するには、ARPリクエストを聞くインターフェイスの名前を指定し、ARP応答とARP返信で使用されるネットワークのMACネットワークを送信する必要があります
サービスをアクティブにして起動します。
sudo systemctl enable arp-proxy.service
sudo systemctl start arp-proxy.service
サービスステータス:
sudo systemctl status arp-proxy.service
● arp-proxy.service - arp-proxy for overlapped networks
Loaded: loaded (/lib/systemd/system/arp-proxy.service; enabled; vendor preset: enabled)
Active: active (running) since Вс 2017-03-12 18:41:01 MSK; 7s ago
Main PID: 10294 (python3)
Tasks: 1
Memory: 18.6M
CPU: 981ms
CGroup: /system.slice/arp-proxy.service
└─10294 python3 /opt/arp-proxy/arp-proxy.py enp4s0 00:05:00:05:00:05
SystemDでサービスを管理します
SCAPYのインストール:
sudo pip3 install scapy-python3
スケープドキュメント
Scape Doc PDF