web-dev-qa-db-ja.com

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

専用サーバーを実行していますKVM n-1のWeb向け仮想マシン専用のn個のパブリックIPアドレスを使用した仮想化。ここで、専用アドレスがありますが、代わりにホストマシンから2つまたは3つのポートが転送されます。

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

brctl show

enter image description here

転送したいとしましょう

  • 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 

何が悪いのですか?

3

トラフィックを別のprotに転送する場合、ポストルーティング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
3
Artem Vasiliev

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

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が必要になる場合もあります。

0
cscracker