FreeBSD。カーネル内のネットワークパケットパス

  1. FreeBSDPFファイアウォール
  2. FreeBSD。PFトラフィックのフィルタリング
  3. FreeBSD。PFのストリーム、タグ、アンカー
  4. FreeBSD。PF条件付きルーティング
  5. FreeBSD。カーネル内のネットワークパケットのパス。<-あなたはここにいます


以前の記事では、PFとその主な機能について説明し、さまざまな状況でこのファイアウォールを適用しようとしました。ただし、どのルールとどの順序で構成を配置するかについての単純な知識だけでは、目標を達成するのに必ずしも十分ではありません。OSカーネルレベルと、ファイアウォールがOSカーネルとどのように相互作用するかについて、もう少し深く見て初めて、多くのことが明らかになります。









ネットワークカードドライバー(OSIモデルのレベル2)のレベルは分析しませんが、すぐにレベル3に上がり、tcp / ipカーネルスタックが機能します。







着信パッケージごとに、最初に行うことはmbufオブジェクトを作成することです。これはカーネルの基本的なデータ構造であり、パッケージ自体とパッケージに関するすべてのメタデータ(送信元アドレスと宛先アドレス、ルート(ネクストホップ)、ttl、ラベル、その他の属性)の両方を格納します。同じオブジェクトがローカルソケットバッファを格納します。ヘッダーと小さな内部データバッファで構成されています。次に、このmbufはカーネルスタックのツアーを開始します。







パッケージパスの簡略図を次に示します。


ip_input()



2番目のレベルの出口で、パケットはip_input()関数に入ります。







  • TT1およびその他のパラメータがチェックされます。
  • 次に、ALTQ(トラフィック優先順位付けシステム)の条件に従って通過します(存在する場合)。
  • IPSEC_CAPS(), ipsec, , , , . ipsec ip_input(), .
  • pfil. . , , . rc.conf PF, .
  • . — IP, ip_forward(). .
  • (reassemble), .
  • IPSEC_INPUT().
  • , . — icmp error ip_output().


, .







ip_forward()



.







  • ipsec — IPSEC_FORWARD().
  • . , net.inet.ip.forwarding 1. - , icmp error ip_output().
  • , , icmp_redirect, .
  • ttl.
  • ip_output().


ip_output()



.







  • . , .
  • ipsec — IPSEC_OUTPUT().
  • pfil — .
  • , (dst), (fib) . , . , .
  • , .
  • .




, . , . , . , , , . mbuf.







, pf in out.







pass in on re0 inet...
      
      





ip_input. out — ip_output.







pass out quick on $ExtIf2 ...
      
      





anchors .







route-to reply-to next hop :







pass in quick on $ExtIf2 reply-to ($ExtIf2 $ExtIf2Gw ) tagged DSTNAT
pass in quick on $IntIf1 route-to ( $Tun1 $Tun1Gw ) from ($IntIf1:network)
      
      





rtable:







pass in quick on $IntIf2 from { $IntIf2Net } rtable 1 tag PASS
      
      







FreeBSD, , , , .







— . , , , , , VPN , , ftp-, web- jabber-, IP-… , . 35 , 9 .








All Articles