Fish in the river

思考 技术
记录 回忆
  1. Main page
  2. 运维技术
  3. Linux
  4. Main content

在CENTOS7上安装KVM,使用NAT模式,端口映射访问KVM虚拟机

2024年4月13日 109hotness 0likes 0comments

在centos7上 创建的 kvm 虚拟机,如果虚拟网络设置为 NAT 而不是 bridge 的话,从宿主机之外是没有办法直接访问的,只能在宿主机上进行连接。

这样很不方便。有人说为什么不使用bridge网络呢。如果要从宿主机之外的主机直接访问的话。原因是因为,公司只给你分配这一个IP啊。

如果想开放虚拟机的某个服务端口,比如 ssh 或者 http,可以在宿主机上设置 iptables 规则。

步骤如下:

1. 禁用centos主机的防火墙

sudo systemctl stop firewalld

sudo systemctl disable firewalld

2.禁用selinux

2.1打开/etc/selinux/config

2.2找到'SELINUX='行,将它的值设置为'disabled'。

3.允许路由转发(网上很多教程都没有提到这一步)

3.1进入目录/etc/sysctl.d

3.2创建文件00-system.conf

3.3在这个文件中追加一行net.ipv4.ip_forward = 1

3.4重启生效,或者输入命令生效sudo sysctl -p

4.设置iptables规则

需要实现的是,当访问宿主机 (HOST_IP) 的特定端口 (HOST_PORT) 时,转发给指定的虚拟机端口 (GUEST_IP:GUEST_PORT)。

在宿主机上运行以下 iptables 命令:

$ sudo iptables -I FORWARD -o virbr0  -p tcp -d $GUEST_IP --dport $GUEST_PORT -j ACCEPT
$ sudo iptables -t nat -I PREROUTING -p tcp --dport $HOST_PORT -j DNAT --to $GUEST_IP:$GUEST_PORT

举例:
KVM虚拟机的IP地址为192.168.122.162。
开放的端口为122(本来是开放端口22,但是端口22被主机占用了)
需要设置如下两条iptables规则。
sudo iptables -I FORWARD -o virbr0 -d 192.168.122.162 -p tcp --dport 122 -j ACCEPT
sudo iptables -t nat -I PREROUTING -p tcp --dport 122 -j DNAT --to 192.168.122.162:122

5. 此时可以通过HOST_IP:HOST_PORT访问主机了。
Tag: Linux
Last updated:2024年4月13日

joey

This person is a lazy dog and has left nothing

Like
< Last article
Next article >

Comments

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
Cancel

归档

  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024

分类目录

  • C#
  • Dock
  • Excel
  • Kindle
  • Linux
  • Windows
  • 生活感悟
  • 群晖
  • 运维技术

COPYRIGHT © 2024 水中小鱼. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang