次の図に示すネットワークを構成しました。
ROT1はトマトベースのルーターです。サブネット192.168.1.0/24の内部ネットワーク内のすべてのクライアント用のBR0ブリッジネットワークインターフェイスを備えています。クライアントの1つはNASデバイス(NAS01)で、ownCloudやSMBサーバーなどの基本的なサービスを提供します。LAP01クライアントとMOB01クライアントの両方がNAS01を表示できます。 ROT1には2つのVPNも構成されています。TAP0はBR0でブリッジされるOpenVPNブリッジトンネルであるため、クライアントLAP04はサブネット192.168.1.0/24内のDHCPサーバーからIPアドレスを受信します。このクライアントはNAS01にpingを実行することもできます。内部サブネット内のデバイス。ルーターROT01はarpwake
プログラムを実行して、ホストがネットワーク内の他のクライアントからARP要求(who-has)で要求されたときに、MagicPacketでNAS01を自動的にウェイクアップします。説明は次のとおりです。アプリケーションとそのソースコードへのリンク ここ 。arpwake
アプリケーションはNAS01のMACアドレスを含むARPリクエストをBR0でリッスンしており、ネットワーク内のクライアントの1つがあれば、MagicPacketを自動的に送信します。問題は、OpenVPNでもルーテッドVPNトンネルをセットアップしようとしていることです。 TUN0ネットワークのクライアントの1つがNAS01を要求したときに、NAS01を自動的にウェイクアップするために、arpwake
アプリケーションを使用します。 NAS01がアップしている場合は、pingを実行してすべてのサービスを使用できますが、ダウンしている場合は、そのインターフェイス(TUN0)にARP要求がないため、arpwake
アプリケーションでウェイクアップできません-すでに確認済みですルーターのtcpdumpを使用します。コマンドecho 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
でプロキシARPを使用しようとしましたが、それでも機能しません。
ルーターの構成は次のとおりです。
ルート
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.200.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.0.1 * 255.255.255.255 UH 0 0 0 vlan2
192.168.200.0 192.168.200.2 255.255.255.0 UG 0 0 0 tun0
192.168.1.0 * 255.255.255.0 U 0 0 0 br0
192.168.0.0 * 255.255.255.0 U 0 0 0 vlan2
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.0.1 0.0.0.0 UG 0 0 0 vlan2
iptables(TUN0のみに関するiptables-save
の出力)
# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*nat
:PREROUTING ACCEPT [50195:5904352]
:POSTROUTING ACCEPT [409:28145]
:OUTPUT ACCEPT [4413:306096]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Sun Aug 28 12:08:23 2016
# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*mangle
:PREROUTING ACCEPT [1628436:1350223724]
:INPUT ACCEPT [43707:3160699]
:FORWARD ACCEPT [1563428:1344198921]
:OUTPUT ACCEPT [13790:1556262]
:POSTROUTING ACCEPT [1576178:1345632445]
COMMIT
# Completed on Sun Aug 28 12:08:23 2016
# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*filter
:INPUT DROP [10689:641141]
:FORWARD ACCEPT [19:1151]
:OUTPUT ACCEPT [13539:1531250]
-A INPUT -i tun0 -j ACCEPT
COMMIT
# Completed on Sun Aug 28 12:08:23 2016
TUN0 OpenVPN config(セキュリティ関連のオプションは削除されました)
local [IP_address]
port [PORT]
proto udp
dev tun
server 192.168.200.0 255.255.255.0
Push "route 192.168.1.0 255.255.255.0"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
Push "dhcp-option DNS 192.168.1.1"
TUN0インターフェイスのifconfig(デフォルトでは、OpenVPNはこのインターフェイスをNOARPオプションで起動しますが、コマンドifconfig tun0 arp
でこれをオンに戻しても私の問題は解決しません)。
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.200.1 P-t-P:192.168.200.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:311 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:21166 (20.6 KiB) TX bytes:3486 (3.4 KiB)
私の質問は、このTUN0インターフェイスを作成してARPの使用を開始する方法です。
非IPトラフィックは、レイヤー3(tun)インターフェイスを介して転送されません。これは、ブロードキャストトラフィックとイーサネットヘッダーを節約できるという全体的な利点です。このすべてについては OpenVPN wiki で読むことができます。
arpwakeがどのように機能するのか理解できません。リンク先のWebページは、ウィキというよりはまとまりのないものです。ただし、このファイアウォールルールを追加してみてください。
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
これにより、パケットヘッダー内のすべての送信元IPアドレスがルーターのIPアドレスに書き換えられます。これがarpwakeをトリガーするかどうかはわかりませんが、試してみてください。
[〜#〜]編集[〜#〜]:
arpwakeを使用しない回避策を考えました。次のiptablesルールを追加します。
iptables -A INPUT -i tun0 -s xxx.xxx.xxx.xxx/24 -d 192.168.1.4/32 -m state --state NEW -m state ! --state ESTABLISHED -j LOG --log-prefix "NEW_CONN_ATTEMPT"
ここで、xxx.xxx.xxx.xxx/24はVPNトンネルのネットワークです。次に、Sudoで実行される実行可能スクリプトを、次の内容でセットアップします。
tail -f /var/log/firewall.log | awk '/NEW_CONN_ATTEMPT/ {system("/usr/local/bin/myscript")}'
ここで、/ usr/local/bin/myscriptは、マジックパケットをNASに送信するスクリプトです。動作するはずです。