web-dev-qa-db-ja.com

iptables / KVM転送ポート

1つの外部IPアドレスを持つサーバーがあります(例:_1.2.3.4_)。そのサーバーでlibvirtを使用して仮想マシンを実行します。次に、外部からssh(_port 1234_)を介してホスト上の仮想サーバーにアクセスしたいと思います。

私のホストシステムでは、外部IP(_eth0_)に接続されているネットワークインターフェイス_1.2.3.4_を取得しました。

私の仮想マシンは、_virbr0_と呼ばれるnatインターフェースを介してホストマシンにip _192.168.122.235_で接続されています。

ポートを転送する必要があるので、iptableで次のようにしました

_iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to-destination 192.168.122.235:1234_

_iptables -A FORWARD -p tcp -d 192.168.122.235 --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT_

基本的なネットワーキングでは、ホストでUFWを実行しても_port 1234_が許可されます。

_Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
[SOMEOTHERPORTS]
1234/tcp                  ALLOW IN    Anywhere
1234/tcp (v6)             ALLOW IN    Anywhere (v6)
_

関係するすべてのネットワークインターフェイスで転送が許可されていることを確認しました。

_user@someserver ~ # cat /proc/sys/net/ipv4/conf/virbr0/forwarding 
1
user@someserver ~ # cat /proc/sys/net/ipv4/conf/eth0/forwarding 
1
_

外部ネットワークから_1.2.3.4_にssh経由でサーバーに接続しようとすると、次のようになります。

_ssh: connect to Host 1.2.3.4 port 1234: Connection refused
_

完全に機能しているホストからのssh接続を確認しました。

  • ここで何が悪いのですか?
  • UFWはiptablesに干渉しますか?
  • どうすればこれを機能させることができますか?
  • Libvirt/virt-managerでポート転送を行う簡単な方法はありますか? (私はこれを試しました: http://secomputing.co.uk/2012/02/21/Forwarding-ports-to-KVM-clients/ 変更時にXMLが有効でないため、どちらも機能しませんでしたto /それは検証しますが、「ネットワーク」で許可すると機能しません)
3
Flatron

考慮すべき点がいくつかあります。

ここで何が悪いのですか?

現在のiptables設定を見てみましょう。次に、それを調べます。

UFWはiptablesに干渉しますか?

UFWはiptablesのコマンドラインフロントエンドですが、iptablesの機能の多くが不足しています。 iptables構成があると、入力したコマンドに基づいてUFWが何をしたかがわかります。ただし、同じコンピューター上で両方を使用してルールを作成しないでください。それは合併症を求めています。 UFWでコマンドを入力する予定がある場合は、iptablesスクリプトを無効にする必要があります。 iptablesにコマンドを入力する場合は、UFWを削除する必要があります。

どうすればこれを機能させることができますか?

これを試して。

iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to 192.168.122.235:1234

iptables -A FORWARD -i eth0 -o vibr0 -p tcp --dport 1234 -j ACCEPT

ただし、ゲストはNAT=アダプターを使用してホストに接続されているため、これはおそらく機能しません。

本当に考慮すべきことは、アダプターの種類をNATからブリッジに変更することです。

1
user5870571

また、ブリッジ接続を使用する必要があると思います。

ネットワークの名前を調べてみてください。

 virsh net-edit <network name>

Virt Managerで確認できるネットワークの名前。通常はデフォルトです:

 virsh net-edit default

NAT=からbridge(また、Virt Managerにあるブリッジ名)に変更します)

<network>
   <name>default</name>
   <uuid>cc45a671-e8d8-4149-a6a5-8d5547551a58</uuid>
   <forward mode='route'/>
   <bridge name='virbr0' stp='on' delay='0'/>
   <mac address='AA:CC:DD:86:53:54'/>
   <ip address='192.168.122.1' netmask='255.255.255.0'>
      <dhcp>
         <range start='192.168.122.2' end='192.168.122.254'/>
      </dhcp>
   </ip>
</network>

備考:

  • この例では、DHCPを使用してVMに名前を付けました。静的な設定もできます

  • Ifconfigを使用すると、次のようになります。

    virbr0 Link encap:Ethernet Hardware Adresse AA:VV:CC:86:53:54
    inet Adresse:192.168.122.1 Bcast:192.168.122.255 Maske:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX-Pakete:127 Fehler:0 Verloren:0Überläufe:0 Fenster:0 TX- Pakete:44 Fehler:0 Verloren:0Überläufe:0Träger:0 Kollisionen:0Sendewarteschlangenlänge:0 RX-Bytes:13032(13.0 KB)TX-Bytes:4707(4.7 KB)

  • 基本的に、sshにはポート22を使用する必要があります

  • 使用してみてください:

    Sudo iptables -t nat -A POSTROUTING -s 192.168.122.235 -j SNAT --to-source 1.2.3.4

したがって、ポートに問題がある場合は、ローカライズできます。実際、VMのポートをGufwで閉じると、.

0
user1408341

ほぼ同じ問題が発生しました。 NATネットワークを使用して、ホストマシンからKVMを実行しているVMにポート22を転送したいと思いました。

私はこの投稿を見つけました: https://ubuntuforums.org/showthread.php?t=2261173&p=13210545#post13210545

私には答えがありました。

TL; DR

192.168.1.161は、内部ネットワーク上のサーバーのIPです。 192.168.122.2は、ホスト上の私のVMのIPです。

iptables -t nat -I PREROUTING -p tcp -d 192.168.1.161 --dport 22 -j DNAT --to-destination 192.168.122.2:22
iptables -I FORWARD -m state -d 192.168.122.2/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT 

免責事項。これが正確に何をするのか私にはわかりません。他の多くの回答と同じように見えますが、パラメータタグの一部がわずかに異なっています。

0
Jonas Laursen

これらはかなり順調な私の転送ルールです。

-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.122.0/24 -o br1 -j MASQUERADE
-A INPUT -s 192.168.122.0/24 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j ACCEPT
-A FORWARD -i br1 -o virbr0 -j ACCEPT
0
NotoriousPyro