1. 程式人生 > 其它 >KVM虛擬機器通過iptables+NAT模式實現遠端連線訪問

KVM虛擬機器通過iptables+NAT模式實現遠端連線訪問

技術標籤:KVMlinuxubuntusshkvm

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規則

    [email protected]:~# sudo iptables -D FORWARD 10 -t filter
    [email protected]:~# sudo iptables -D FORWARD 11 -t filter
    
  • 遠端連線測試

在這裡插入圖片描述