单ip下安装Proxmox VE 并且设置Nat端口转发

/ 0评 / 1

Proxmox VE 设置Nat端口转发

一、ip段实例

母鸡外网ip:1.2.3.4

内网ip段: 10.21.21.254

小鸡ip:10.21.21.5

二、开始折腾

1. 方法 1(不推荐)

这个方法不推荐,因为修改一个端口pve整台服务器都要重启,非常影响到其他机器的正常运行。但是是官方的说明。还是有必须说明一下!了解了这个方法才能理解方法2怎么实现的!

1.1 设置内网ip段

vim /etc/network/interfaces

1.2 原来配置

auto vmbr0
iface vmbr0 inet static
    address 1.2.3.4
    netmask 255.255.255.0
    network 1.2.3.0
    broadcast 1.2.3.255
    gateway 1.2.3.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0

1.3 增加一个内网的网卡

auto vmbr2
iface vmbr2 inet static
    address 10.21.21.254
    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 iptables -t nat -A POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE
    post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 10.21.21.5:22
    post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 10.21.21.5:22

1.4 详细解说

1.4.1 内网ip段
address 10.21.21.254
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
1.4.2 vmbr2 ip转发 vmbr0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
1.4.3 允许ip段转发
post-up iptables -t nat -A POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE
1.4.4 设置小鸡ip转发
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 10.21.21.5:22
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 10.21.21.5:22

2222是你外网链接的端口,22是你内网小鸡的端口!由此类推80,443等端口也是这样设置,必须设置2条!

例如80端口

post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.21.21.6:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.21.21.6:80

2. 方法 2(推荐)

方法2比较推荐,这样的做法主服务器不用重启,只需要重启当前的vm就可以了!

2.1 设置内网ip段

vim /etc/network/interfaces

2.2 增加网卡

auto vmbr2
iface vmbr2 inet static
    address 10.21.21.254
    netmask 255.255.255.0
    bridge_ports none
    bridge_stp off
    bridge_fd 0

2.3 设置网卡转发

vim /etc/sysctl.conf
#看看有没有这行,没增加。有被注释,取消注释!
net.ipv4.ip_forward=1
#让他立刻生效
/sbin/sysctl -p

2.4 设置要转发的端口

iptables -t nat -A POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE
#10.21.21.0/24是2.2步骤里面你设置的ip段
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 10.21.21.10:22
#vmbr0 为你的实体网卡,而不是vmbr2虚拟网卡,别搞错了!
#10.21.21.6:22就是你要转发的vm端口
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.21.21.10:80
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.21.21.10:443
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 3312 -j DNAT --to 10.21.21.6:3306
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 3390 -j DNAT --to 10.21.21.2:3389
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 808 -j DNAT --to 10.21.21.2:808
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2223 -j DNAT --to 10.21.21.8:22

安装apt-get install iptables-persistent

apt-get install iptables-persistent

保存规则

iptables-save > /etc/iptables/rules.v4

规则生效加载

iptables-restore < /etc/iptables/rules.v4

####2.5 开启加载规则

touch /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
vi /etc/network/if-pre-up.d/iptables

在打开的编辑器里面输入以下文本,然后保存退出

#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules.v4

这样设置后,每次开机会从/etc/iptables读取iptables设置。修改iptables规则后,执行iptables-save > /etc/iptables这个命令就会把设置好的iptables规则保存到/etc/iptables这个文件。这样就不怕重启后丢失iptables设置了。

3.全部设置完成以后重启网卡

/etc/init.d/networking restart

三、设置80,443端口为全局都可以用

1 安装Nginx

我们上面教程大家大概明白了,一个小鸡只能使用1个唯一的端口。这样对于我们来说不太方便,万一我要用很多80端口和443端口呢?所以我们还的必须折腾一个80和443的全局都可以使用的端口!这里呢,我们借助Nginx的负载均衡或者反向代理都可以实现,haproxy也可以实现!

1.1 小鸡安装Nginx

可以选择Lnmp或者直接Nginx,本人比较建议安装Lnmp。因为方便申请SSL证书!

wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp

2 配置Nginx规则

2.1 反代服务器Nginx规则

server
    {
        listen 80;
        server_name blog.e9china.net ;
        location / {
           proxy_connect_timeout 300;      #跟后端服务器连接超时时间,发起握手等候响应时间
           proxy_send_timeout 300;         #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
           proxy_read_timeout 600;     #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
           proxy_buffer_size 256k;     #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
           proxy_buffers 4 256k;       #同上,告诉nginx保存单个用几个buffer最大用多少空间
           proxy_busy_buffers_size 256k;          #如果系统很忙时候可以申请最大的proxy_buffers
           proxy_temp_file_write_size 256k;       #proxy缓存临时文件的大小
           proxy_redirect off;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://10.21.21.6;
    }
        access_log off;
    }

server
    {
        listen 443 ssl http2;
        server_name blog.e9china.net ;

        ssl_certificate /usr/local/nginx/conf/ssl/blog.e9china.net/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/blog.e9china.net/blog.e9china.net.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

        location / {
           proxy_connect_timeout 300;      #跟后端服务器连接超时时间,发起握手等候响应时间
           proxy_send_timeout 300;         #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
           proxy_read_timeout 600;     #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
           proxy_buffer_size 256k;     #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
           proxy_buffers 4 256k;       #同上,告诉nginx保存单个用几个buffer最大用多少空间
           proxy_busy_buffers_size 256k;          #如果系统很忙时候可以申请最大的proxy_buffers
           proxy_temp_file_write_size 256k;       #proxy缓存临时文件的大小
           proxy_redirect off;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass https://10.21.21.6:443;
    }

        access_log off;
    }

2.2 真实服务器Nginx规则

先将反代服务器的ssl证书上传到你实际的服务器上,然后在Nginx下设置

server
    {
        listen 80;
        #listen [::]:80;
        server_name blog.e9china.net ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/blog.e9china.net;

        include rewrite/diguo.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php-pathinfo.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log off;
    }

server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name blog.e9china.net ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/blog.e9china.net;

        ssl_certificate /usr/local/nginx/conf/ssl/blog.e9china.net/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/blog.e9china.net/blog.e9china.net.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

        include rewrite/diguo.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php-pathinfo.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log off;
    }

2.3 伪静态规则

伪静态规则在实体机器上生效,反代服务器只是起了一个桥链的作用!

2.4 mysql应该放那里?

由于我们是Nat模式,所以我们的数据库最好是放到独立一个vm下。也可以装到反代服务器里面,这样的好处就是一个mysql服务器管理全部vm的数据库处理。怎么链接呢?利用内网模式链接,看看下面的例子

下面把localhost改成远程IP即可了 实例

<br />$conn=mysql_connect('10.21.21.5','root','123');

安装帝国cms,Wordpress或者其他的程序的时候把localhost修改成你的内网ip

Lnmp使用者请注意要修改网卡规则。因为Lnmp安装的时候会加入一个iptables,禁止远程连接3306端口!

解决办法,请参考Sandy之前写的Blog:LNMP1.5解决MySQL无法远程连接问题

四、安装母鸡安装BBR

什么是BBR。TCP-BBR是谷歌出品的TCP拥塞控制算法。BBR目的是要尽量跑满带宽,并且尽量不要有排队的情况。BBR可以起到单边加速TCP连接的效果。
BBR解决了两个问题:在有一定丢包率的网络链路上充分利用带宽。非常适合高延迟,高带宽的网络链路。降低网络链路上的buffer占用率,从而降低延迟。非常适合慢速接入网络的用户。
linux内核4.9及以上默认支持bbr。debian9内核为4.9,Proxmox5.2的默认内核4.15,可以直接开启使用。以下在root用户操作:

4.1 开启BBR

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

4.2 保存生效

sysctl -p

4.3 执行,查看生效情况

sysctl net.ipv4.tcp_available_congestion_control

结果如下就是开启了

net.ipv4.tcp_available_congestion_control =  reno cubic bbr

可以lsmod看一下

lsmod|grep bbr
tcp_bbr                20480  238

五、Nat能做些什么?

生产力和想象力是相辅相成的,没想象力只有生产力,那是富士康工厂模式!有了想象力就是Apple公司!

比如你有一台E5,64G的服务器。但只有1个ip,又不想花钱去买昂贵的ip。毕竟现在请求ipv4资源没剩多少了,老外也不想以前一样傻乎乎的给你一大堆。这时候Nat就有作用了!

Sandy打个比方吧!

现在做网站依靠的是火车头和python,2个目前比较牛的采集器!但是呢?python在linux的表现和实际生产力肯定比在win下强,而火车头又必须在win下运行,作用就来了。

又比如一些自动的化的脚本,以前是把网站和脚本全部放一个服务器,严重混合使用导致Log、目录非常乱。那么Nat的作用就可以体现了!

剩下的就得靠你自己去想像了!

发表评论

邮箱地址不会被公开。 必填项已用*标注