web-dev-qa-db-ja.com

高度なNAT-PATとNAT

UbuntuサーバーをNAT/PATを使用するルーターとして構成したところ、次のことを実行しようとしています。

私は、ネットワークをルーターで接続された小さなネットワークに分割している学校で働いています。すべてのトラフィックを外部IPアドレスに転送する1つの部屋の内部ネットワークに表示されるIPアドレスを作成する必要があります。

説明すると、これは構成です。

外部のNAT:eth1-192.168.1.254/24

内部のNAT:br0-192.168.2.10、マスカレードが有効

192.168.2.1のようなアドレスを作成する必要があります。これもbr0に対して、すべてのトラフィックをIP 192.168.1.1に転送し、そのIPがネットワークに直接接続されているように見えますが、マスカレードは有効になっていません。 。

基本的な考え方は、ルーターのアドレスbr0を192.168.2.10に設定し、br0にマスカレードしない別のアドレスを設定し、すべてのトラフィックをメインルーターのアドレスである192.168.1.1に転送することです。この理由は、br0が物理ネットワークとVPNの間のブリッジであり、宛先と同じアドレスを持つルーターの背後からアクセスされるためですNAT IPアドレス-192.168.1.1。Asクライアントが常に「routeadd」コマンドを発行できることを保証することはできません。これを回避する方法が必要です。

Br0のセカンダリIPアドレスを構成する方法を見つけ、br0:1を192.168.2.1として構成しましたが、すべてのトラフィックを192.168.1.1に転送できないようです。

よろしくお願いします。

1
Comrade Zed

私があなたを正しく理解している場合、あなたがやろうとしていることは、事実上、いくつかのNATが関与するポリシールーティングの形式です。あなたは、外部のホストのエイリアスを作成しようとしているようです。そのサブネット上にある特定のルーティングされたサブネット。

対応するSNAT(またはマスカレード)なしでDNATルールを作成できます。これが行われない理由は、ほとんどのNATが接続の問題をハックするように設計されているため、NATの「内部」のアドレスがそれ以外の場合は「外部」からルーティングできません。実際にホスト192.168.1.1に192.168.2.0/24またはそれが何であれ戻るルートがある場合、思い出すとDNATルールを設定できます。

iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d 192.168.2.1 -j DNAT --to 192.168.1.1

ここで、しばらく停止して、まだ実行しないでください。

これは、192.168.2.1が宛先アドレスである場合に機能します(トラフィックに応答するアドレスが元の宛先と異なるという奇妙な癖を作成します)。正直なところわかりませんが、あなたの説明から、それがあなたのやりたいことだとは思いません。 192.168.2.1ホストが宛先としてではなくルーターとして機能することになっている場合、DNATを実行してもまったく役に立ちません。ルーターとして機能することになっている場合、NAT(またはPAT)はまったく役に立ちません。

私があなたを正しく読んで、空白をそのまま埋めると、VPNトラフィックがこのサブネット192.168.2.0/24にブリッジされてしまうようですが、それは広い世界またはのサブセットに到達する必要がありますこのゲートウェイ192.168.1.1を介してそれ。その場合、行うべきことは単に192.168.2.1/24(VPNクライアントのデフォルトゲートウェイとして設定したと思います)をルーターに割り当てる、転送が有効になっていることを確認し、 VPNクライアントは、元のデフォルトの非VPNゲートウェイ(ホームゲートウェイ?)のように、ネクストホップが192.168.1.1であることを心配する必要はありません。パケットが通過するとき、彼らはそれを完全に認識していません。 ISPは、RFC1918アドレスでこの種のスキームを常に使用して、誤って不足しているルーティング可能なアドレスを無駄にしないようにしています。パスに沿ったすべてのルーターが一意のアドレスを持っている必要はありません(ただし、一意のアドレスを持っていると、トラブルシューティングがはるかに簡単になります)。ここでの秘訣は、TCP接続のエンドポイントは、ネクストホップのIPアドレス以外は何も知る必要がないということです。

すでにこれを行っていて問題が発生している場合は、リターンパスを確認してください。 192.168.1.1のゲートウェイが、トラフィックをNAT(192.168.2.0と表示されます)の外部に送信するときに、これらのアドレスに対してNATを実行していない可能性があります。/24はまだ)、それらをファイアウォールで保護しているか、または192.168.2.0/24に戻る適切なルートがありません。

私が両方の点であなたの意図を誤解した場合、あなたを助けるかもしれない3番目のことがあります。 iptablesでゲートウェイを指定できる唯一の方法は、TEEターゲットを使用することです。これにより、パケットのクローンが作成され、クローンが変更されずに任意のホストにルーティングされます。ただし、クローンされていないパケットはどうにかして処理する必要があります。そのターゲットは、マングルPREROUTINGチェーンに追加できます。

iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -j TEE --gateway 192.168.1.1

それは奇妙なことです。これは、トラフィックをルーティングするのではなく、ログに記録するように設計されています。元のパケットは、私が思うiptablesの後の段階で破棄できますが、これは単なる混乱であり、実際にはお勧めしません。

ランダムなポイントとして、ip addr addコマンドを使用してインターフェイスにIPアドレスを追加できます。 net-tools(ifconfig)を使用しないでください。それは古く、多くの機能が欠けており、長期的には頭痛の種になるだけです。

1
Falcon Momot