外部IP /ポートの要求を内部IP /ポートにリダイレクトしますか?

外部IP /ポートの要求を内部IP /ポートにリダイレクトしますか?

n-1つのWeb接続仮想マシン専用n個のパブリックIPアドレスでKVM仮想化を実行する専用サーバーがあります。これで、プライベートアドレスがなく、代わりにホストから2〜3個のポートが転送されるいくつかのWeb接続VMを設定しようとしています。

ブリッジ構成は次のとおりです。

brctl show

ここに画像の説明を入力してください。

伝えたいとしましょう

  • 178.126.193.153:201 ~ 192.168.1.101:22
  • 178.126.193.153:801 ~ 192.168.1.101:80

まず、コメントアウトを削除してホストでポート転送を有効にしました。

# net.ipv4.ip_forward=1

、それから/etc/sysctl.conf私はそうだった

sysctl -p /etc/sysctl.conf
service network restart

それでは、上記のレシピと同様にこの問題、私はそうした:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 201 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i br0 --dport 801 -j DNAT --to-destination 192.168.1.101:80
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 801 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

クライアントマシンで実行し、対応するifconfigインターフェイスeth0のIPアドレスが実際に192.168.1.101であることを確認しました。仮想マシン内部のインターフェースはと言いますかeth0

しかし、うまくいきません。

nmap 178.126.193.153開いているポート201または801が表示されず、ssh -l root -p 201 178.126.193.153混乱しています。

ssh: connect to host 178.126.193.153 port 201: Connection refused

ip routeホストに戻る

178.126.193.128/26 dev br0  proto kernel  scope link  src 178.162.193.153 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 
169.254.0.0/16 dev br0  scope link  metric 1004 
default via 178.126.193.190 dev br0 

私は何が間違っていましたか?

答え1

トラフィックを別のポートに転送する場合は、ルートの後にSNATルールを追加する必要があります(または偽装することは重要ではありません)。また、順方向ルールでもいくつかの間違いを犯しました。だからこれを試してみてください:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -d 192.168.1.101 -p tcp --dport 22 -j SNAT --to-source 178.126.193.153

答え2

ループバックルーティングを有効にする必要があります。私のルータで次のことを行いました。

iptables -A FORWARD -o eth1 -d $IP -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

私の設定では、eth0がインターネットインターフェイス、$ IPがインターネットIP、eth1が内部インターフェイスです。

ここで重要なのは、内部インターフェイスから外部宛先IPへのトラフィックを処理するにはFORWARDルールが必要であることです。このルールはDNATの前に適用されるため、論理的には多少混乱しています。

2番目のルールは、内部トラフィックを最初に転送することを可能にし、それを他の方法で達成できます。

このタスクを実行するためにebtablesが必要な可能性がある仮想ネットワークの部分のために、他の特別なケースがあるかどうかはわかりません。

関連情報