KVM虚拟机通过iptables+NAT模式实现远程连接访问
KVM虚拟机通过iptables+NAT模式实现远程连接前言由于服务器只有一个公网ip,想要KVM虚拟机可以远程登陆操控,桥接是无法实现这个念想了,所以直接采用iptable+NAT网络的模式来进行操作。本篇文章继承上一篇文章《Ubuntu配置GPU直传kvm虚拟机》https://blog.csdn.net/weixin_43802844/article/details/112569060 来续
·
KVM虚拟机通过iptables+NAT模式实现远程连接
前言
- 由于服务器只有一个公网ip,想要KVM虚拟机可以远程登陆操控,桥接是无法实现这个念想了,所以直接采用iptable+NAT网络的模式来进行操作。
- 本篇文章继承上一篇文章《Ubuntu配置GPU直传kvm虚拟机》https://blog.csdn.net/weixin_43802844/article/details/112569060 来续写。
KVM网络
- 上篇文章采用的是桥接模式,这个模式需要给虚拟机一个额外的ip地址,如果是内网的话,可以选择桥接模式。如果有要远程连接登录的需求,就要考虑NAT模式 + iptables 端口转发的方式了
配置NAT网络
-
按照正常情况下NAT都是默认开启的,执行
virsh net-lis
查看
-
NAT模式开启之后会有一个NAT模式默认的网卡virbr0,这块网卡就是负责给虚拟机分配ip地址的网卡。
创建虚拟机(带有GPU直传)
-
sudo virt-install --name=ubuntu --memory=380000,maxmemory=380000 --vcpus=46,maxvcpus=46 --os-type=linux --os-variant=ubuntu18.04 --cdrom=/data/ubuntu-18.04.5-live-server-amd64.iso --disk path=/data/ubuntu.img,size=600 --network network=default --graphics vnc,listen=0.0.0.0,keymap=en_us --host-device 04:00.0 --host-device 83:00.0 --features kvm_hidden=on --machine q35 --check disk_size=off
-
--memory //分配的内存 --vcpus //分配的cpu --cdrom //ios映像文件,--location会出现hvm报错,所以直接选用cdrom减少麻烦 --disk path //硬盘 size大小为G --graphics vnc //登录方式为vnc,创建过程vnc远程配置即可 --host-device //显卡的id,建议按组全部添加 --features kvm_hidden=on //阻止nvidia驱动发现虚拟机 --machine q35 //采用q35架构 --network network=default //default即为默认的NAT网络模式
-
创建完成后使用vnc连接安装系统
配置iptables
-
开启IP转发
vi /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl –p //令上面修改生效
-
配置iptables端口转发
sudo iptables --table nat --append PREROUTING --protocol tcp --destination xx.xx.xx.xx --destination-port xxxx --jump DNAT --to-destination 192.168.122.xx:22 sudo iptables -t nat -A PREROUTING -p tcp --dport xxxx -j DNAT --to-destination 192.168.122.2:22 sudo iptables -t nat -A POSTROUTING -p tcp --dport 22 -d 192.168.122.2 -j SNAT --to 192.168.122.1 //注意:这里会有一个坑但是因人而异,这样配置完成之后可能会出现依旧无法实现远程连接的现象,这时候需要删除一个或者两个规则。
-
查看iptables规则
sudo iptables -nL -v --line-numbers -t filter Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 21974 22M DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0 2 21974 22M DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 4 0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0 5 0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 6 0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 7 11179 21M ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 8 10793 776K ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 9 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 10 2 84 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 11 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 12 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 13 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 14 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 15 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
这里的第十条和第十一条,阻止了我们的端口转发,需要把他删掉
-
删除特定的iptables规则
root@GPU-B175:~# sudo iptables -D FORWARD 10 -t filter root@GPU-B175:~# sudo iptables -D FORWARD 11 -t filter
-
远程连接测试
更多推荐
已为社区贡献1条内容
所有评论(0)