Debian LANパケット転送ウェイクアップ?

Debian LANパケット転送ウェイクアップ?

私はuntangle box(下記のdebian 10)を持っていて、あるサブネットのホストから別のサブネットのホストにWOLパケットを転送したいと思います。

私の最初の解決策は、Knockdを使用し、あるサブネットのインターフェイスからsynパケットを受信し、別のサブネットでetherwakeコマンドを実行してホストを起動することでした。 netcatを使用して、最初のサブネット上のLinuxサーバーからゲートウェイIP(unbox)にsynパケットを送信します。

問題は、ファイアウォール自体へのトラフィックが最初にアドレス指定されていないVLANインターフェイスで処理されることです。これは少し奇妙です。 syn パケットはアドレス指定されていないインターフェイスにのみ表示され、他のすべてのパケットは物理アドレスが指定された VLAN インターフェイスに表示されます。私はこれをtcpdumpとして確認しました。 KnockdはIPアドレスを持たないインターフェイスからの受信を拒否したので、Knockdを使用したい私の計画を破りました。

tcpdump を使用してアドレス指定されていないインターフェイスに入ってくる syn パケットを見ることができます。もしそうなら、Knockdがアドレス指定されていないインターフェイスを受信するように強制する方法はありますか?

Knockdが完全に不可能な場合、Debian 10でWOLパケットフォワーダをどのように実装しますか?

ベストアンサー1

ホストを起きたときの問題は、ホストにパケットを送信するには、ネットワークスタックがNICのMACアドレスを知る必要があることです。通常は動的に処理されます。ARP。 MACエントリがルータのARPテーブルから削除された場合、ホストはスリープ中にARPクエリに応答できません。したがって、ルータは眠っているホストに到達し、WOL Magic Packet™を送信するために必要なMACアドレスを取得できません。パケットにはMACアドレスの16倍が含まれています。ペイロードから。

ネットワークスタックにのみ依存してこの問題を克服するには、2つの方法があります。iptablesまたはTC)。

永久ARP

ルータには制御権があるため、休止状態のホストに対してルータに永続ARPエントリを設定できます。これにより、以前の問題は決して発生しません。これで、ルーターはどこでもブロードキャストを使用せずに簡単にWOL Magic Packet™を送信または転送できます。 NAT 経由の「ポート転送」は、リモートホストで使用できますwakeonlanetherwakeコマンド(UDPポートを変更できるため、コマンドではありません)。

したがって、休止ホストには固定アドレス(または永続DHCPリースを持つアドレス)が必要です。ルータの WAN アドレスが 192.0.2.2 であると仮定します。ウォン0、ルータのLAN側インターフェイスは192.168.1.1/24です。ラン0MACアドレスが12:34:56:78:9a:bcのインターフェイスのスリープは、ホスト192.168.1.101/24です。

ルーターから:

ip neighbour replace 192.168.1.101 lladdr 12:34:56:78:9a:bc dev lan0 nud permanent

NICが受信したパケットが消費されるのか、目が覚めているホストでもまだ適切に使用できるかどうかはわからないため、伝統的にポート9が選択されています。ドロップサービス「実行中」で、どちらも同じ場合。必要に応じて9以外のポートを選択してください。眠っているホストのこのポートは使用されず、ファイアウォールで保護されているか(パケットを削除する)、実際に削除サービスを実行することをお勧めします。 1つのポートが1つの宛先にマッピングされるため、複数のWOLホストがある場合は、各ホストに異なるポートを持つ必要があります。

OP記述の他の場所に到着する最初のパケットの問題は、OP記述の一部ではないすべてのインタフェースを選択することで解決できます。ラン0相互作用。

そのため、ルーターで次のように使用します。iptables、 DNAT を実行し、パケットのリダイレクトを許可します。

iptables -t nat -I PREROUTING ! -i lan0 -p udp --dport 9 -j DNAT --to-destination 192.168.1.101
iptables -I FORWARD -m conntrack --ctstate DNAT -d 192.168.1.101 -j ACCEPT

これで、インターネット上のリモートホストは次のようにして休止ホストを起動できます。

wakeonlan -i 192.0.2.2 -p 9 12:34:56:78:9a:bc

システム統合は、ネットワーク構成で使用される方法によって異なります。たとえば、次のように設定した場合interfacesそして上下なら、これら2つのコマンドはセクションのコマンドとして追加することも、iptablesコマンドから削除することもできます。pre-upiface lan0 ...downip neighbourup


ダイレクトサブネットブロードキャスト(カーネル4.19から開始)

ツールには、常にターゲットホストを含​​むすべてのホストにブロードキャストイーサネットフレームとして到着するブロードキャストパケットを使用するオプションがあります。

これはルーティング時に実行できますが、より多くのリスクがあります(参加を含む)。反射攻撃)。使用前に安全を考慮してください。

直接サブネットブロードキャストをグローバルに有効にする必要があります。そして受信WANインターフェイス(ターゲットLANインターフェイスではない)複数のWANインターフェイスがある場合(OPは、パケットが最初のインターフェイスに到着し、次に別のインターフェイスに到着することを示します)、関連するすべてのインターフェイスでこれを有効にします。

sysctl -w net.ipv4.conf.all.bc_forwarding=1
sysctl -w net.ipv4.conf.wan0.bc_forwarding=1

NATおよびFORWARDルールを追加します。

iptables -t nat -I PREROUTING ! -i lan0 -p udp --dport 9 -j DNAT --to-destination 192.168.1.255
iptables -I FORWARD -m conntrack --ctstate DNAT -d 192.168.1.255 -j ACCEPT

リスクを制限するためのオプションとして、IPv4イーサネットフレーム(イーサタイプ0x800)をWOL用の事実上イーサネットタイプ0x842に変換するには、以下を使用します。TCしたがって、結果はネットワークスタックでは無視されます(WOL NICでは無視されません)。 iptablesによって設定されたフラグを使用できます。ここでは、IP宛先とUDP宛先ポート9のみが考慮されます。 Untangleが使用している場合は、前者の方法がマーカーと競合し、Untangleが使用している場合、2つの方法のいずれかが競合します。TCサービス品質のため。

tc qdisc add dev lan0 root handle 1: prio # simple classful qdisc used only to enable filters
tc filter add dev lan0 parent 1: protocol ip basic match '
    cmp (u32 at 16 layer network eq 0xc0a801ff) and
    cmp (u8 at 9 layer network eq 17) and
    cmp (u16 at 2 layer transport eq 9)
    ' action skbmod set etype 0x842

以上、

  • 16階層ネットワークeq 0xc0a801ffのU32は、IPアドレス宛先192.168.1.255を表します。
  • u8 はレイヤ 9 ネットワーク eq 17 の UDP を表します。
  • u16 は、宛先ポート 9 に対してレイヤ 2 から eq 9 を送信します。
  • 結果はEtherタイプを0x842に変更することです。

同様に、インターネット上のリモートホストは次のようにして休止ホストを起動することができます。

wakeonlan -i 192.0.2.2 -p 9 12:34:56:78:9a:bc

ただし、毎回LAN全体をターゲットにしているため、複数のスリープWOLホストがある場合は同じポートを維持し、MACアドレスのみを変更すれば十分です。


考慮すべき他の方法:

fwknopdサーバーにインストールしてfwknop暗号化を実装するためにクライアントにインストールされている一つコマンドを実行するパケット認証メカニズムです。これはルーターで/実行をトリガーするために使用できますwakeonlanetherwake

おすすめ記事