CMZENO

请叫我季诺
Call Me ZENO (CMZENO) | 季诺的话匣子
  1. Main page
  2. 服务器
  3. Main content

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

2023年1月30日 179hotness 0likes 0comments

本文内容

配置桥接网卡,使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,如图所示
vmbr1nat.jpg
安装完成后,配置网卡信息,IP地址配置为内网IP地址,如图所示
winnetwork.jpg
配置完成后测试,使用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  #删除端口映射

如图所示
3389tcp.jpg
测试连接成功,如图
online.jpg

来源

脚本作者:https://github.com/flyqie
参考:https://pve.proxmox.com/wiki/Network_Configuration

This article is licensed with Creative Commons Attribution-NonCommercial 4.0 International License
Tag: nat proxmox PVE vps 服务器
Last updated:2023年1月30日

zeno

This person is a lazy dog and has left nothing

Like
< Last article

Comments

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
Cancel
Tag aggregation
webp 服务器 网站优化 nginx 图片优化 网站加速 pagespeed 宝塔面板
Newest Hotest Random
Newest Hotest Random
Proxmox VE同时配置NAT共享IP和独立IP虚拟机 宝塔Nginx环境安装pagespeed模块加速网站以及配置WebP格式图片加速方法 Hello world!
宝塔Nginx环境安装pagespeed模块加速网站以及配置WebP格式图片加速方法 Hello world! Proxmox VE同时配置NAT共享IP和独立IP虚拟机

COPYRIGHT © 2023 CMZENO. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang