Proxmox VE同时配置NAT共享IP和独立IP虚拟机

188次阅读
没有评论

共计 3996 个字符,预计需要花费 10 分钟才能阅读完成。

说明

本文内容:配置桥接网卡,使 Proxmox VE(PVE) 可以同时创建 NAT 虚拟机和独立 IP 虚拟机,同时可以使用脚本映射 NAT 虚拟机的端口到外网

前言

有台 5IP 的机器,虽然配置不怎么样,但是也开了不少虚拟机,可用的 4 个 IP 挪来挪去着实不够用,遂产生了开 NAT 虚拟机的想法。

但是能开 NAT 虚拟机的同时,独立 IP 的机器也要能开通,毕竟有些服务转发起来也蛮麻烦的。

请教了一下谷姓同学,鼓捣了一下,测试可行,作为备忘,记录如下:

方法

**1、桥接网卡配置 **

编辑网卡文件

nano /etc/network/interfaces

内容如下:

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5)
    source /etc/network/interfaces.d/*
    auto lo
    iface lo inet loopback
 
    allow-hotplug enp4s0
    iface enp4s0 inet manual
 
    auto vmbr0
    iface vmbr0 inet static
            address 111.1.11.130
            netmask 255.255.255.248
            gateway 111.1.11.129
            bridge-ports enp4s0
            bridge-stp off
            bridge-fd 0
 
    auto vmbr1
    iface vmbr1 inet static
            address 192.168.1.1
            netmask 255.255.255.0
            bridge_ports none
            bridge_stp off
            bridge_fd 0
            post-up echo 1 > /proc/sys/net/ipv4/ip_forward
            post-up bash /root/iptables.config.sh
            post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
            post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE

物理机的网卡名为 enp4s0,vmbr0 为独立 IP 虚拟机的桥接网卡,自行修改为正确的信息;vmbr1 为 NAT 虚拟机的桥接网卡,可以使用 192.168.1.2-255 这些内网 IP。

**2、新建虚拟机 **

开通独立 IP 虚拟机的时候桥接网卡选择 vmbr0,NAT 虚拟机选择 vmbr1,如图所示

Proxmox VE 同时配置 NAT 共享 IP 和独立 IP 虚拟机

安装完成后,配置网卡信息,IP 地址配置为内网 IP 地址,如图所示

Proxmox VE 同时配置 NAT 共享 IP 和独立 IP 虚拟机

配置完成后测试,使用 Proxmox VNC 功能登录虚拟机,测试可以正常联网

**3、NAT 转发 **

很多时候,NAT 虚拟机单单能连接外部网络是不够的,还需要外部网络能够访问到虚拟机内部的服务,比如 ssh,rdp 等。

端口映射可以以使用 iptables 来完整,已经有大佬写了方便的脚本

脚本内容:

iptables.sh

    #! /bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    #ConfFile
    iptablesconf='/root/iptables.config.sh'
    function rootness(){if [[ $EUID -ne 0]]; then
           echo "脚本需要以 ROOT 权限运行!"
           exit 1
        fi
    }
    function conf_list(){cat $iptablesconf}
    function conf_add(){if [ ! -f $iptablesconf];then
            echo "找不到配置文件!"
            exit 1
        fi
        echo "请输入虚拟机的内网 IP"
        read -p "(Default: Exit):" confvmip
        [-z "$confvmip"] && exit 1
        echo
        echo "虚拟机内网 IP = $confvmip"
        echo
        while true
        do
        echo "请输入虚拟机的端口:"
        read -p "(默认端口: 22):" confvmport
        [-z "$confvmport"] && confvmport="22"
        expr $confvmport + 0 &>/dev/null
        if [$? -eq 0]; then
            if [$confvmport -ge 1] && [$confvmport -le 65535]; then
                echo
                echo "虚拟机端口 = $confvmport"
                echo
                break
            else
                echo "输入错误,端口范围应为 1 -65535!"
            fi
        else
            echo "输入错误,端口范围应为 1 -65535!"
        fi
        done
        echo
        while true
        do
        echo "请输入宿主机的端口"
        read -p "(默认端口: 8899):" natconfport
        [-z "$natconfport"] && natconfport="8899"
        expr $natconfport + 0 &>/dev/null
        if [$? -eq 0]; then
            if [$natconfport -ge 1] && [$natconfport -le 65535]; then
                echo
                echo "宿主机端口 = $natconfport"
                echo
                break
            else
                echo "输入错误,端口范围应为 1 -65535!"
            fi
        else
            echo "输入错误,端口范围应为 1 -65535!"
        fi
        done
        echo "请输入转发协议:"
        read -p "(tcp 或者 udp , 回车默认操作: 退出):" conftype
        [-z "$conftype"] && exit 1
        echo
        echo "协议类型 = $conftype"
        echo
        iptablesshell="iptables -t nat -A PREROUTING -i vmbr0 -p $conftype --dport $natconfport -j DNAT --to-destination $confvmip:$confvmport"
        if [`grep -c "$iptablesshell" $iptablesconf` != '0']; then
            echo "配置已经存在"
            exit 1
        fi
        get_char(){
            SAVEDSTTY=`stty -g`
            stty -echo
            stty cbreak
            dd if=/dev/tty bs=1 count=1 2> /dev/null
            stty -raw
            stty echo
            stty $SAVEDSTTY
        }
        echo
        echo "回车继续,Ctrl+ C 退出脚本"
        char=`get_char`
        echo $iptablesshell >> $iptablesconf
        runreturn=`$iptablesshell`
        echo $runreturn
        echo '配置添加成功'
    }
    function add_confs(){
        rootness
        conf_add
    }
    function del_conf(){
        echo
        while true
        do
        echo "请输入宿主机的端口"
        read -p "(默认操作: 退出):" confserverport
        [-z "$confserverport"] && exit 1
        expr $confserverport + 0 &>/dev/null
        if [$? -eq 0]; then
            if [$confserverport -ge 1] && [$confserverport -le 65535]; then
                echo
                echo "宿主机端口 = $confserverport"
                echo
                break
            else
                echo "输入错误,端口范围应为 1 -65535!"
            fi
        else
            echo "输入错误,端口范围应为 1 -65535!"
        fi
        done
        echo
        iptablesshelldel=`cat $iptablesconf | grep "dport $confserverport"`
        if [! -n "$iptablesshelldel"]; then
             echo "配置文件中没有该宿主机的端口"
             exit 1
        fi
        iptablesshelldelshell=`echo ${iptablesshelldel//-A/-D}`
        runreturn=`$iptablesshelldelshell`
        echo $runreturn
        sed -i "/$iptablesshelldel/d" $iptablesconf
        echo '配置删除成功'
    }
    function del_confs(){printf "你确定要删除配置吗?操作是不可逆的 (y/n)"
        printf "\n"
        read -p "(默认: n):" answer
        if [-z $answer]; then
            answer="n"
        fi
        if ["$answer" = "y"]; then
            rootness
            del_conf
        else
            echo "配置删除操作取消"
        fi
    }
    action=$1
    case "$action" in
    add)
        add_confs
        ;;
    list)
        conf_list
        ;;
    del)
        del_confs
        ;;
    *)
        echo "参数错误! [${action} ]"
        echo "用法: `basename $0` {add|list|del}"
        ;;
    esac

iptables.config.sh(配置文件)

    #!/usr/bin/env bash

使用方法:

上传脚本到宿主机 root 目录,赋予 iptables.config.sh 可执行权限

    bash iptables.sh add  #添加端口映射
    bash iptables.sh del  #删除端口映射 

如图所示

Proxmox VE 同时配置 NAT 共享 IP 和独立 IP 虚拟机

测试连接成功,如图

Proxmox VE 同时配置 NAT 共享 IP 和独立 IP 虚拟机

# 补充 #

iso 安装位置:cd /var/lib/vz/template/iso

正文完
 
阿里郎
版权声明:本站原创文章,由 阿里郎 2023-05-19发表,共计3996字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
国外主机测评
国外主机测评
专注于主机测评,主机推荐,VPS测评,VPS推荐,VPS教程,服务器推荐,Linux教程,服务器教程
阅读量
177562
评论数
19



hostkvm优惠促销活动
评论(没有评论)
衡天云优惠活动