KVM虛擬機器通過iptables+NAT模式實現遠端連線訪問
阿新 • • 發佈:2021-01-23
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=
-
--memory //分配的記憶體 --vcpus //分配的cpu --cdrom //ios映像檔案,--location會出現hvm報錯,所以直接選用cdrom減少麻煩 --disk path //硬碟 size大小為G --graphics vnc //登入方式為vnc,建立過程vnc遠端配置即可 --host-device //顯示卡的id,建議按組全部新增 --features kvm_hidden=
-
建立完成後使用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規則
[email protected]:~# sudo iptables -D FORWARD 10 -t filter [email protected]:~# sudo iptables -D FORWARD 11 -t filter
-
遠端連線測試