web-dev-qa-db-ja.com

同じインターフェイスにプロキシARPを使用することはできますか?

LinuxアクセスポイントにWiFiアクセスポイントを接続しています。ルーター自体がインターネットに接続されています。複数の理由(主にセキュリティとサービスの品質を制御するため)のために、ユーザー間のトラフィックも含めて、すべてのユーザーのトラフィックを強制的にLinuxルーターに通したいと考えています。

これを行うために、APでステーション間の通信を無効にしました(私はD-Link DWL-7200 APを使用しています)。 APを構成した方法は次のとおりです。

ssh admin@accesspoint1
D-Link Access Point wlan1 -> set sta2sta disable
D-Link Access Point wlan1 -> reboot

これは正常に機能します。ワイヤレスユーザーは互いに通信できなくなります。少なくとも直接ではありません。私の目標は、トラフィックをルーターまで強制的に送り返すことです。

それを行うには、Linuxルーターでproxy-arpを有効にしました。

echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp

これが全体像です。

                  10.0.0.0/8 subnet    
   ____________________|______________________
  /                                           \
  |                                           |

               (sta2sta disabled)
  UserA----------------AP---------------------Router-------------------Internet
10.0.0.55             /                   eth1     eth0
                     /                10.0.0.1     203.0.113.15
                    /        proxy-arp enabled
  UserB____________/
10.0.0.66

UserAがUserBにpingを実行した場合、私は期待発生します。

  1. UserAが10.0.0.66へのpingを試みます
  2. したがって、UserAは「10.0.0.66は誰ですか?」と言ってARPブロードキャストを送信します。
  3. アクセスポイントは、ルータへの要求を通過させます(ただし、sta2staが無効になっているため、UserBには送信されません)
  4. ルーターは要求を受信し、プロキシarpがeth1で有効になっているため、「10.0.0.66のパケットを私に送信します(ルーターのMACアドレス)」と応答する必要があります。
  5. アクセスポイントは応答を受信し、それをUserAに中継する必要があります。
  6. 次に、UserAは実際のpingパケットをルーターのMACアドレスに送信する必要があります
  7. パケットはAPを経由してルーターに到達する必要があります
  8. ルーターは、宛先MACアドレスをUserBのアドレスに変更し(必要に応じてARP要求を実行)、送信元MACアドレスを独自のアドレスに変更することにより、それをeth1にルーティングして戻す必要があります。
  9. パケットはAPに到達し、UserBにリレーされるはずです。
  10. UserBはping要求に応答する必要があります。
  11. 応答はAPを経由してルーターに到達する必要があります。
  12. 返信はUserAにルーティングする必要があります。
  13. aPを通過してUserAに到達する必要があります。

残念ながら、LinuxルーターはARP要求を受信しますが、それに応答できないため、この夢全体はステップ4で失敗します。インターネットで読んだところ、これは正常なようです。プロキシARPは、この種の設定で使用するようには設計されていません。より正確には、ルーターは、ARP要求の送信元と同じインターフェイス上にあるホストのARP要求に応答しません。この場合、ARP要求はeth1から送信されますが、「IP 10.0.0.66を持っているのは誰ですか?」と表示され、ホスト10.0.0.66はインターフェイスeth1上にあります。

APでsta2staが無効になっていない場合、UserAはルーターからARP応答を受信し、UserBから別のARP応答を受信するため、これが良いデフォルトの動作である理由を理解しています。しかし、私の場合、同じインターフェイス上のホストであっても、すべてのARP要求に応答することは完全に理にかなっていると思います。

このデフォルトのプロキシarpの動作を回避する方法はありますか?

7
MiniQuark

あなたが望むことは実際には可能ですが、かなり最近のLinuxカーネル(> = 2.6.34、またはバックポート)が必要です。

必要なオプションは/proc/sys/net/ipv4/conf/*/proxy_arp_pvlanです。

 proxy_arp_pvlan-BOOLEAN 
 Private VLAN proxy arp。
基本的に、プロキシarpが同じインターフェイスに返信することを許可します
(ARP要求/要請元
 
これは、RFC 
 3069などの(イーサネット)スイッチ機能をサポートするために行われます。この場合、個々のポートは
それぞれと通信できません。その他ですが、アップストリームルーターとの通信は許可されています
。 RFC 3069で説明されているように、proxy_arp'ingによってこれらのホストがアップストリーム
ルーターを介して通信できるようにすることが可能です
。 
 proxy_arp。
 
と一緒に使用する必要はありません。このテクノロジーは別の名前で知られています:
 RFC3069ではVLANと呼ばれています集約。
 CiscoおよびAlliedTelesynはこれをプライベートVLANと呼んでいます。
 Hewlett-Packardはこれをソースポートフィルタリングまたはポート分離と呼んでいます。 )。

このサポートを追加する上流のコミットは 65324144b50bc7022cc9b6ca8f4a536a957019e です。

7
Sergey Vlasov

LinuxプロキシARPの実装を簡単に調整して目標を達成できるかどうかはわかりません。サブネット化/ルーティングアプローチの使用を検討しましたか?

アイデアは次のとおりです。たとえば、ワイヤレスネットワークに/24アドレス空間を割り当てます。あなたの質問の例と一致させるために、私は10.0.0.0/24を使用します。次に、その/24を62個の/30サブネットに分割します:10.0.0.4/3010.0.0.8/3010.0.0.12/30、... 10.0.0.248/30

/30には2つの使用可能なIPアドレスがあり、1つはワイヤレスクライアントに割り当てられ、もう1つはLinuxルーターのeth1インターフェースに割り当てられます(エイリアス化されます)。具体的には、このシリーズのワイヤレスクライアントアドレスを10.0.0.610.0.0.1010.0.0.14、...、10.0.0.250に割り当てたとします。また、ルータのeth1に次の一連のIPのエイリアスを設定します:10.0.0.510.0.0.910.0.0.13、...、10.0.0.249

構成を完了するために、各ワイヤレスクライアントは255.255.255.252のネットマスクと10.0.0.X-1のデフォルトゲートウェイを取得します(ここで、XはクライアントのIPアドレスの最後のオクテットです)。ルーターでは、次のようにipコマンドを使用してIPアドレスをeth1に追加できます。

ip addr add 10.0.0.5/30 broadcast 10.0.0.7 dev eth1
ip addr add 10.0.0.9/30 broadcast 10.0.0.11 dev eth1
ip addr add 10.0.0.13/30 broadcast 10.0.0.15 dev eth1
...
...
ip addr add 10.0.0.249/30 broadcast 10.0.0.251 dev eth1

長所:

  • 目的の目標を達成します。すべてのワイヤレスクライアントトラフィックはルーターを介して転送され、クライアントは相互に接続できます。
  • 各クライアントの最初のホップは常にルーターであるため、ARPブロードキャストはめったに発生しません。

短所:

  • 構成は型破りです。静的セットアップ(クライアントとルーター)はかなり簡単に実行できますが、動的(DHCP)構成を確立するのは非常に困難です。
0
Steven Monday