Linuxはプロキシarpを提供しませんが、ドキュメントでは提供しています。

Linuxはプロキシarpを提供しませんが、ドキュメントでは提供しています。

私はPDP-10エミュレータを開発しています(参照:https://github.com/Rhialto/klh10)。ここにインストールされているオペレーティングシステムは、IPv4を介して外部の世界と通信しようとする可能性があります(これらのシステムが普及したとき、IPv4は今使用され始めました)。そのために、エミュレータはホスト上のパケットフィルタ(またはタップデバイス)をオンにします。

ローカルネットワーク10.0.0.xにあるとします。エミュレートされたオペレーティングシステムは、10.0.0.51などのIPv4アドレスを使用できます。

同じネットワーク上の他のホストが仮想ホストと通信するために、10.0.0.51 に対する ARP 要求を送信します。私はUnixカーネルが合理的なイーサネットアドレス(プロキシARPと呼ばれる)を使ってこれらの要求に応答したいと思います。

Unixにこれを行うために、エミュレータはホストオペレーティングシステムのイーサネットアドレスを使用して「arp -s 10.0.0.51 01:23:45:56:78:9A pub」を実行します(同じ)。

Linux以外のUnixenでは、望ましい効果が現れます。 10.0.0.51 で Telnet または ping を試みると、シミュレートされたホストが ARP 要求を実行して応答を返すことがわかります。

23:13:42.391941 ARP, Request who-has 10.0.0.51 tell 10.0.0.16, length 46
23:13:42.391954 ARP, Reply 10.0.0.51 is-at f6:2b:a4:a0:76:b0 (oui Unknown), length 28

ただし、Linux(Ubuntu 15.10がある)ではこれは機能しません。エントリは奇妙な方法ですが、ARPテーブルに「arp -a」として表示されます。

? (10.0.0.51) at <from_interface> PERM PUB on eth0

私はプロキシARPingを試してアクティブにするために見かけに関連しているように見えるsysctlsを試しました。

net.ipv4.conf.all.proxy_arp = 1
net.ipv4.conf.default.proxy_arp = 1
net.ipv4.conf.eth0.proxy_arp = 1

そしてさらに

net.ipv4.ip_forward = 1

しかし、これらのどれも役に立ちません。私は何を見逃していますか?

Linuxシステムではarpコマンドのみを使用し、観察にはtcpdumpを使用し、ARP要求を生成するには他のシステムを使用してそれをテストできます。機能すると、必要な追加の設定手順をエミュレータにインストールできます。

編集:同じネットワークに2台のコンピュータがあり、そのうちの1つがLinuxの場合は、試すことができる簡単なシナリオは次のとおりです。

  1. Linuxシステムでは、sudo arp -s 10.0.0.51 01:23:45:56:78:9A pub他のローカルネットワークを使用している場合は、対応するIPアドレスを使用しないでくださいが、ネットワークに適した他のIPアドレスに置き換える必要があります。192.168.0.51可能性があるかもしれません。また、Ubuntu は任意のイーサネットアドレスを許可しないため、eth0 インターフェイスのイーサネットアドレスを交換する必要があるかもしれません。
  2. 同じボックスまたは別のボックスに、sudo tcpdump -i eth0 arpネットワーク上のすべてのARP要求と応答が表示されます。
  3. 他のコンピュータ、おそらく完全に異なるOSではこれを行いますping 10.0.0.51(またはもちろん使用するアドレス)。予想される結果:tcpdumpコマンドを実行すると、ARP要求とARP応答が表示されます。そうでない場合は、これを達成するためにどの設定が必要かを知りたいです。これがUbuntuに固有の場合です。最終的には失敗しますがping(そのIPアドレスに使用できるホストはありません)、このテストではこれは重要ではありません。このメッセージが表示されると、ping: sendto: Host is downARP 応答がないことがわかっていることを意味します。

ベストアンサー1

私はかつて同じ問題を経験しました。 Rui F Ribeiroが正しいことがわかりました。プロキシが必要なIPアドレスへのパスを見逃しました。

arp -i eth0 -sD 192.168.8.10 eth0 pub
ip route add 192.168.8.10 via tun5

arp 要求は、ip Route コマンドの実行後にのみ応答されます。

私はこれを明示的に言及する文書を見つけることができませんでした。https://help.ubuntu.com/community/SSH_VPN、基本的に)。

おすすめ記事