web-dev-qa-db-ja.com

iptables:あるインターフェースの静的IPから別のインターフェースの動的IPに着信パケットを転送するルール

最新のRaspbianを実行しているPIをネットワークブリッジとして使用したいのですが、それが正確に正しい用語かどうかはわかりませんが、目標は簡単に説明できます。

  • pIのUSBポートの1つがモデムに接続されている-インターフェイスusb0のDHCPによってIPを取得し、インターネットが機能する(箱から出して、本当にいい)
  • pIのイーサネット/ RJ45ポートがルーターのWANポートに接続されている
  • PIに、ルーターに接続されたデバイスにインターネットアクセスを提供し、すべての着信要求をブロックします(ここに公開するものはありません)。

PIはDHCPを実行しません。そのeth0はアドレスマスク255.255.255.0で静的IP 192.168.0.1を使用するように構成され、ルーターはIP 192.168.0.2、同じアドレスマスクおよび192.168.0.1を使用するように構成されますゲートウェイ。

テストでは、PI自体がオンラインであるという事実に加えて、次のことがわかります。

  • pIからルーターへのpingは成功します(ルーターでオプションが有効になったら...)
  • lANデバイスからPIへのpingが成功する

ネットワーキングに関してはすべてが問題ないように見えますが、おそらくパケット転送ルールがないか間違っているために、LANデバイスからインターネットにアクセスできません。 eth0に到着するすべてのパケットをIP 192.168.0.2からusb0の動的IPに転送するルールは何ですか+戻ってくる途中の「応答パケット」の対応物?すべての着信要求をブロックするルールと組み合わせて後者ですか?

ありがとう!

更新

@BillThorの答えとこれのおかげで tutorial 私は軌道に乗ることができました。ルーティングとファイアウォールの側面を混同しないことが重要です。ルーティングには特別な転送ルールは必要ありません。IPマスカレードが有効になっている場合、これは「含まれています」。 IPマスカレードを有効にするコマンドは次のとおりです。

$> Sudo sysctl -w net.ipv4.ip_forward=1カーネルでIP転送を有効にし、

$> Sudo iptables -t nat -A POSTROUTING -o <wan_network_interface> -j MASQUERADE

<wan_network_interface>を使用して、インターネット接続を提供するネットワークインターフェース、私の場合はusb0を使用します。これは、FORWARDのデフォルトのファイアウォールポリシーがACCEPTである限り機能します(他のルールでは明示的に許可されていません)。 iptables -Sが返された場合

OUTPUT DROP FORWARD ACCEPT INPUT DROP

FORWARDのデフォルトポリシーをDROPに変更すると、次のルールによりインターネット接続の共有が有効になります。$> Sudo iptables -A FORWARD -i <shareconn_nw_intf> -o <online_nw_intf> -j ACCEPT $> Sudo iptables -A FORWARD -i <online_nw_interface> -o <shareconn_nw_interface> -j ACCEPT

パケットがIPマスカレードによってnot開かれていたポートの<online_nw_interface>に到着した場合、どうなるかまだ疑問がありますか? INPUTと見なされますか、それとも上記の最後のFORWARDルールが適用されますか?つまり、これらのFORWARDルールは、他の場所(マスカレード)で行われた転送決定を受け入れるようにファイアウォールを構成しているようですが、実際にはiptablesに何かを転送するように指示していません。直感に反することがわかりますが、転送ルールを保持したままマスカレードルールを削除すると、インターネットに接続できなくなります。

2
DonTseTse

マスカレードを有効にすると、すべての発信トラフィックがPiからのように見えるようになります。出発点はこれらのルールでしょう。

Sudo sysctl -w net.ipv4.ip_forward=1
Sudo iptables -A FORWARD -i eth0 -j ACCEPT
Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

チェーンに適切なポリシーを設定する必要があります。おそらく、WANインターフェースで予期しないパケットをドロップし、eth0インターフェースでパケットを拒否するという追加のルールを使用します。

IPv6を使用できる場合、これにはネットワークアドレス変換は必要ありませんが、個別のip6tables実装があります。別のshorewall6これを設定するパッケージ。
shorewallで使用できるpiのようなツールを使用して設定する方が簡単な場合があります。 Shorewall サイトには、独自のルールまたはshorewallツールのみを構築するために使用できる多くのドキュメントがあります。

2
BillThor