最近实践4核8G 50G centos7.6 (注意检查VNC端口不要和上面的冲突)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name java-ios-7.6 --memory 8192 --vcpus 4 --disk /data/sys/java-ios-7.6.qcow2,format=qcow2,size=50 --cdrom /data/sys/mnt/CentOS-7.6-x86_64-Minimal-1810.iso --network bridge=br0 --graphics vnc,password=qq3366QQ,listen=0.0.0.0,port=5910 --noautoconsole
最近实践8核16G 50G 2012R2 (注意检查VNC端口不要和上面的冲突)
virt-install --virt-type kvm --os-type=windows --os-variant win2k8 --name wd-2012 --memory 16384 --vcpus 8 --disk /data/sys/wd-2012.qcow2,format=qcow2,size=50 --cdrom /data/sys/mnt/cn_windows_server_2012_r2_x64_dvd_2707961_han_datacenter.iso --network bridge=br0 --graphics vnc,password=qq3366QQ,listen=0.0.0.0,port=5911 --noautoconsole
最近实践4核8G 50G 2008R2 (注意检查VNC端口不要和上面的冲突)
virt-install --virt-type kvm --os-type=windows --os-variant win2k8 --name game-2008r2 --memory 8192 --vcpus 4 --disk /data/game-2008r2.qcow2,format=qcow2,size=50 --cdrom /mnt/cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso --network network=default --graphics vnc,password=qq3366QQ,listen=0.0.0.0,port=5910 --noautoconsole
--os-variant rhel7 (安装centos7.x)(也可不指定)
--os-variant win2k8 (安装windows2008、2012)(也可不指定)
--memory 8192,maxmemory=16384
--memory 8192
--vcpus 4,maxvcpus=8
--vcpus 4
--boot hd
--cdrom /boot/CentOS-7.6-x86_64-DVD-1810.iso
--network bridge=br0(桥接模式)
--network network=default(NAT模式)
--graphics vnc,password=qq3366QQ,listen=0.0.0.0,port=5910
--graphics vnc,listen=0.0.0.0
--graphics vnc,password=qq3366QQ,listen=0.0.0.0
--noautoconsole 如果不加,就一直等待虚拟机安装完成,不进行下面操作
连接前工作:
开放5910端口等待连接
firewall-cmd --zone=public --add-port=5910/tcp --permanent
systemctl restart firewalld.service
systemctl status firewalld.service
或是直接将防火墙关闭
systemctl stop firewalld.service (做转发使用)
systemctl disable firewalld.service(做转发使用)
之后有60s的时候需要快速使用vnc进行连接,以进行操作,配置分区的时候只用一个/分区(Standard Partition)就可以了,因为都是虚拟机,不用使用swap分区
关闭KDUMP 功能
网络连接自动获取地址(NAT模式时使用br0桥接时候可不用)
时区选亚洲/上海(可鼠标点选)
宿主机开启IPV4转发(当KVM是NAT模式时使用)
vim /etc/sysctl.conf
把net.ipv4.ip_forward = 1值原来是0,改成1,如果不存在就新增一行
保存,执行命令sysctl -p 使配置生效
sysctl -a | grep ipv4| grep forward 查看内核的所有参数命令查看是否生效,显示net.ipv4.ip_forward = 1表示的是内核开启了路由转发
NAT模式配置端口转发(配置iptables端口转发)
1、查看NAT是否开启
virsh net-list
default active yes yes
通过上面,我们可以看到NAT方式已经开启。而且default是宿主机安装VM支持模块的时候自动安装的。
2、查看宿主服务器virbr0的网卡信息 ifconfig virbr0
3、查看系统中已经存在的网卡 ifconfig
通过上面,我们可以看出网卡virbr0就是NAT方式连接网络时,所使用到的网卡
通过配置文件,来查看NAT方式的DHCP地址池,该配置文件为:/etc/libvirt/qemu/networks/default.xml
4、开启KVM服务器的IPtables的转发功能,使用如下命令:
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
注意该命令中的网卡时br0,而不是eth0(br0是桥接时创建的网卡名字)
----------------------------------------------------------------------------------
假设该KVM的公网IP为192.168.50.146,VM的IP为192.168.122.159,现在我要求通过访问KVM的8022端口访问VM的22端口
要想达到上述功能,我们需要在KVM服务器上设置如下IPtables规则:https://www.cnblogs.com/whych/p/9147900.html
iptables -t nat -A PREROUTING -d 192.168.50.146 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 192.168.122.159:22
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.159 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.50.146
注意这两条IPtables规则:
第一条规则很好理解,就是把所有访问192.168.50.146:8022的请求转发到192.168.122.159:22的端口上。
第二条规则我的理解是,把所有来自192.168.122.0/255.255.255.0网段访问192.168.122.159:22的数据全部通过192.168.122.1这个网关转发出去。
现在我们来实际效果,如下:
ssh -p 8022 root@192.168.50.146
发现一打开就被关闭.是被防火墙阻止了.
打开防火墙
systemctl start firewalld.service
firewall-cmd --zone=public --add-port=5901-6100/tcp --permanent //添加一个端口5901-6100
firewall-cmd --zone=public --add-port=8022/tcp --permanent //添加一个端口8022
firewall-cmd --zone=public --add-port=873/tcp --permanent //添加一个端口873
firewall-cmd --zone=public --add-port=80/tcp --permanent //添加一个端口80
firewall-cmd --zone=public --add-port=443/tcp --permanent //添加一个端口443
firewall-cmd --reload //重新加载规则
firewall-cmd --list-port //列出添加的端口
代码分析
--zone #作用域
--add-port=1935/tcp //添加端口,格式为:端口/通讯协议
--permanent //永久生效,没有此参数重启后失效
如果还是不成功
清空规则
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT //ssh
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT //http
sudo iptables -I INPUT 1 -i lo -j ACCEPT //保持彼此之间的通信--[成功]
sudo iptables -P INPUT DROP
实践实用的规则如下(开放53389到3389、81到81、3050到3050、3150到3150、3014到3014):
iptables -t nat -A PREROUTING -d 103.85.84.94 -p tcp -m tcp --dport 53389 -j DNAT --to-destination 192.168.122.44:3389
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.44 -p tcp -m tcp --dport 3389 -j SNAT --to-source 103.85.84.94
iptables -t nat -A PREROUTING -d 103.85.84.94 -p tcp -m tcp --dport 81 -j DNAT --to-destination 192.168.122.44:81
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.44 -p tcp -m tcp --dport 81 -j SNAT --to-source 103.85.84.94
iptables -t nat -A PREROUTING -d 103.85.84.94 -p tcp -m tcp --dport 3050 -j DNAT --to-destination 192.168.122.44:3050
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.44 -p tcp -m tcp --dport 3050 -j SNAT --to-source 103.85.84.94
iptables -t nat -A PREROUTING -d 103.85.84.94 -p tcp -m tcp --dport 3150 -j DNAT --to-destination 192.168.122.44:3150
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.44 -p tcp -m tcp --dport 3150 -j SNAT --to-source 103.85.84.94
iptables -t nat -A PREROUTING -d 103.85.84.94 -p tcp -m tcp --dport 3014 -j DNAT --to-destination 192.168.122.44:3014
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.44 -p tcp -m tcp --dport 3014 -j SNAT --to-source 103.85.84.94