そこで、私はstunnel、OpenVPN、そして多くのオンライン記事(主にジェイデン・チュア) を実行して正常に作成できましたが、この件に関するオンライン ヘルプをいくつか読んだものの、iptables の部分 (以下で説明) を完全に理解していません。
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
誰か各行を説明してくれませんか? 単純なことかもしれないとは思いますが、正直言ってなぜこれが機能するのか理解できません =P
よろしくお願いします =)
答え1
まず、IP 転送を定義する必要があります。あまり詳しく説明するつもりはありません (私も詳しくありません) が、基本的に、この文脈では、IP 転送とは、あるホストから別のホストを経由してパケットが流れることを意味します。
-A FORWARD ... -j ACCEPT
または同様のもの (つまり、転送されるはずのパケットをすべてドロップする)がない限り、ルール/コマンドはどれも必要ないことを指摘する必要があります-P FORWARD DROP
。ルールは転送を発生させるものではなく、デフォルトが「ACCEPT」でない場合に例外を作成するだけです。(転送は sysctl で「有効」にします。)
ここでルールを見てみましょう:
iptables -A FORWARD -i wlan0 -j ACCEPT
これは、wlan0 から入ってくるパケットを(このホスト上の任意のインターフェースを介して他のネットワークに)転送できるようにすることを意味します。
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
これは、wlan1 から入ってくるパケットを tun0 に転送できるようにすることを意味します。(パケットが tun0 自体のアドレスに到達するためにはこれは必要ありません。これは「転送」としてカウントされないためです。)
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED
これは、拡張機能/モジュールで確認して、関連する接続または確立された接続がある場合にのみ、tun0 から入ってくるパケットを wlan1 に転送できるようにすることを意味します (これは、代わりにスイッチを使用する でstate
廃止されました)。前のルールと合わせて、基本的に、tun0 からのパケットによって接続が開始されない限り、tun0 と wlan1 間の転送を許可することを意味します。conntrack
--ctstate
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
これは基本的に、tun0 から送信されるパケットの送信元アドレスが tun0 のものに変更されることを意味します。これが行われない場合、次のルータは、応答が元の送信元アドレスに到達するために、戻りルートを必要とします。(つまり、元の送信元アドレスに到達するには、このホストがゲートウェイである必要があります)。これは、NAT (オーバーロード) / PAT とも呼ばれます。tun0 を、一般的な消費者向けルータの WAN ポート/インターフェイスのように動作させると考えてください。
答え2
これを理解するには、ルーティングの原理を理解する必要があります。ただし、この回答で本を書くことはできないので、短く簡単に説明します。
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
このルールは基本的にパッケージを取得し、適用しますNATただし、このパッケージをルーティングする方法が決定された後です。これが に適用される理由ですPOSTROUTING
。次に、パッケージを と呼ばれるトンネルに送り返しますtun0
。これが VPN 接続です。ルールはデバイスの IP を認識しないため、マスカレードも適用されます。これがないと、接続するすべてのデバイスに対してこのコマンドを使用する必要があります。したがって、これは一種のワイルド カードと見なすことができます。
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
この行は、wlan0
インターフェースに転送されるすべてのトラフィックを受け入れるように指示しています。このガイドでは、これが主要なインターネット接続として使用されていると想定しているためwlan0
、これはルーターとVPNトンネル間のメインルートです。これにより、Piはこのインターフェースでパッケージを受け入れ、内部ネットワークへのアクセス. ここの 2 番目の行は、基本的にパッケージに戻るためのものです。pi からトンネルに戻ります。
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
この行は、接続が確立されている場合のみ、トンネルからtun0
インターフェースへのトラフィックを許可します。wlan0
設立以前。
簡単に言えば、これらのルールにより、VPN トンネルから来たパッケージがプライベート ネットワークの残りの部分に流れ込み、戻ってくることが可能になります。