コンピューターを2つのネットワーク間のゲートウェイとして構成しようとしていますが、何らかの理由で機能させることができません。
ネットワークの表現は次のとおりです。
192.168.1.101 192.168.1.102 192.168.1.103 ...
| | |
\------------+------+-------+--------...
|
192.168.1.200 (eth1)
PC
(192.168.2.101 192.168.2.102 192.168.2.103 ...)
eth0:1 eth0:2 eth0:3
| | |
\------------+------+-------+--------...
|
192.168.2.200 (eth0)
|
...
私のコンピューターには、インターフェイス192.168.2.200(eth0)に独自のIPアドレスを持つN個の仮想インターフェイス(eth0:*)があります。 eth0:*インターフェイスを攻撃する接続(主にTCP)を同等の192.168.1.1 **サーバーに転送する必要があります。
redir 実行可能ファイルを使用してみましたが、サーバーはリッスンにランダムなポート番号を使用するため(これは変更できません)、テストを行うたびにプロセスを再起動する必要がありました。
だから私はこれらのようなiptablesルールを使用しました(テスト用の1つのサーバーのみ):
iptables -t nat -A PREROUTING -d 192.168.2.101 -j DNAT --to-destination 192.168.1.101
iptables -t nat -A POSTROUTING -d 192.168.1.101 -j SNAT --to-source 192.168.2.101
iptables -A FORWARD -i 192.168.2.101 -d 192.168.1.101 -j ACCEPT
ただし、192.168.2.101:80への接続はすべて「接続が拒否されました」を返し、192.168.1.101:80への接続はすべて受け入れられます。
次に、ルールをリセットせずにiptablesルールで「遊んだ」と、実際には正しいサーバーである192.168.2.101:80に接続することに成功しました。しかし、別の接続(TCP/6666上の一時Webサーバーを使用)を試したところ、上記のように接続が拒否されました。
あなたはそれを機能させるための完全な例を持っていますか?
注:他のテストを行うためにiptablesのすべてのエントリを削除したので、以前に行ったことなしに最初からやり直しました...
@lain:IP転送を有効にしました
$ cat /proc/sys/net/ipv4/ip_forward
1
iptables
はあなたに合ったものを持っています:それはNETMAP
と呼ばれます。
iptables -t nat -A PREROUTING -i eth0 --src 192.168.2.200/?? -j NETMAP --to 192.168.1.0/??
iptables -t nat -A PREROUTING -i eth1 --src 192.168.1.200/?? -j NETMAP --to 192.168.2.0/??
インターフェイスエイリアスについては、それらを捨ててください。インターフェイスエイリアスは非推奨になるだけでなく(ip addr
を使用すると、カーネルがインターフェイスごとに複数のアドレスを持つネイティブ機能にマップしたことがわかります)、ローカルサービスがエイリアスを使用しないため、ここではやり過ぎのようです。
このホストがeth0内のそれらのIPに対するARP要求に応答する場合は、ARPプロキシ機能を使用するか、これらすべてのIPが独自のものであることをカーネルに通知するローカルルートを追加します。
ip route add local 192.168.2.200/?? dev eth0