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を実行した場合、私は期待発生します。
残念ながら、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の動作を回避する方法はありますか?
あなたが望むことは実際には可能ですが、かなり最近の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 です。
LinuxプロキシARPの実装を簡単に調整して目標を達成できるかどうかはわかりません。サブネット化/ルーティングアプローチの使用を検討しましたか?
アイデアは次のとおりです。たとえば、ワイヤレスネットワークに/24
アドレス空間を割り当てます。あなたの質問の例と一致させるために、私は10.0.0.0/24
を使用します。次に、その/24
を62個の/30
サブネットに分割します:10.0.0.4/30
、10.0.0.8/30
、10.0.0.12/30
、... 10.0.0.248/30
。
各/30
には2つの使用可能なIPアドレスがあり、1つはワイヤレスクライアントに割り当てられ、もう1つはLinuxルーターのeth1
インターフェースに割り当てられます(エイリアス化されます)。具体的には、このシリーズのワイヤレスクライアントアドレスを10.0.0.6
、10.0.0.10
、10.0.0.14
、...、10.0.0.250
に割り当てたとします。また、ルータのeth1
に次の一連のIPのエイリアスを設定します:10.0.0.5
、10.0.0.9
、10.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
長所:
短所: