Proxmox VE:优秀的自建vps方案

(https://pve.proxmox.com/wiki/Network_Configuration )

Proxmox终极教程/打造纯IPV6虚拟机/独立IP虚拟机/proxmox集群/

前言
最近入手了一台杜甫,但是天天吃灰,所以最近研究了一下proxmox,打算在上面装上Windows和linux啥啥啥的一机多用。

安装

准备

proxmox只能安装在debian上,所以确保你的系统是debian,最好是升级到debian9,如果主机商没有提供debian9的话,可以按照以下方法升级。
debian7升级到debian8
  1. apt-get update
  2. apt-get upgrade
  3. sed s/wheezy/jessie/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. apt-get update
  5. apt-get upgrade
  6. apt-get dist-upgrade
 
debian8升级到debian9
  1. apt-get update
  2. apt-get upgrade
  3. sed s/jessie/stretch/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. apt-get update
  5. apt-get upgrade
  6. apt-get dist-upgrade
 
期间遇到任何提示都选择 Y 就行了,最后都执行完了后执行 reboot 重启系统!
反正
总之就是你需要 debian9 的系统!)
 
看完这篇文章,你的 KS3C 等等各种独立服务器将可以同时实现多种功能。
针对 PT
  • 多客户端刷 PT(Deluge,utorrent,qbittorrent,rtorrent,transmission…..so on..)
  • 压片
  • 制种发种
  • 115/百度网盘同步
  • 还有最重要的~挂 QQ!!hah 等
针对虚拟化
  • 你可以开设无限的独立 IPV6,NAT 的 IPV4 小鸡
  • 如果你有额外的 ipv4,还可以开设独立 IPV4 独立 IPV6 的小鸡!
  • 支持 windows+linux 任意系统,其中 win 必须 KVM 架构,linux 可 KVM 可 lxc(类似 openvz)

1.前言

对于大多数 PTbox 玩家来说,手里的盒子,也就是各种各样的独立服务器,买回来后仅仅也就是用来安装一个 rutorrent 或者 deluge 这样的 pt 客户端,然后刷刷流量,这样对于一个独立服务器来说简直太浪费了,就拿 KS3C 来说,KS3C 的标准配置是 i3+8g+2t+100Mbps,高配的甚至有 I5+16G 内存的配置,这种级别配置可远远不止可以干这些!
于是想到了利用这些服务器打造个同时能够支持 win+linux 双系统适合 PTer 的服务器,linux 下安装诸如 qBittorrent、ruTorrent、deluge 等等的客户端,win 下可以使用 utorrent 这个只支持 win 的客户端,然后还可以在 win 系统下直接进行制种,然后通过任意客户端做种,然后像百度网盘这种只能很好的在 win 下运行的网盘,你还可以在你的盒子里实时与度盘同步,等等等等。。都可以在同一个服务器上实现,而不仅仅是安装一个 PT 客户端~~接下来看教程吧!

2.安装环境:

2.1.操作系统:Debian9

说明一下,必须要是Debian9系统,原因不详细说了,主要是因为能用最新 PVE 内核,支持 BBR 加速,
对于KS或者SYS这种ovh系列的服务器,只需要安装官方的 VPS Proxmox VE 5 (64bits) 这个模板即可,可以省略安装 proxmox 这一步!!!
对于online系列的服务器,如果有硬 raid,你可以直接使用系统的 proxmox5 模板,如果是软 raid,默认只能 raid1,所以就安装 debian9 吧。
如何你的服务器的提供商没有提供 debian9 系统,比如 oneprovider 的 15 欧等等,只能安装 debian7,你可以参考以下操作
debian7 升级为 debian8:
  1. aptget update
  2. aptget upgrade
  3. sed s/wheezy/jessie/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. aptget update
  5. aptget upgrade
  6. aptget distupgrade
debian8 升级为 debian9:
  1. aptget update
  2. aptget upgrade
  3. sed s/jessie/stretch/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. aptget update
  5. aptget upgrade
  6. aptget distupgrade
期间遇到任何提示都选择 Y 就行了,最后都执行完了后执行 reboot 重启系统!
反正总之就是你需要 debian9 的系统!!!!!

2.2.服务器环境:

DigitalOcean 的 4 核 8G 内存方案 Debian9.4 系统
ipv4:167.99.172.150
ipv6:2604:a880:2:d0::add:1001
这里建议最低双核 4G 内存的机器使用本文方案!否则可能会用的不愉快~

3.安装 proxmox

proxmox 是一款只支持 debian 系统的虚拟化环境,可以安装基于 KVM 和 LXC(openvz 进化版)的虚拟机,使用很方便,有图形界面。接下来安装 proxmox5.X 系列。

3.1.编辑/etc/hosts

比如你登录服务器后显示 root@server1,那么你的服务器的名称就是server1, 你可以通过修改/etc/hostname文件修改它。然后你需要保持你的/etc/hosts 文件如下
  1. 127.0.0.1 localhost.localdomain localhost
  2. 167.99.172.150 server1.proxmox.com server1 pvelocalhost
  3.  
  4. # The following lines are desirable for IPv6 capable hosts
  5. ::1 localhost ip6localhost ip6loopback
  6. ff02::1 ip6allnodes
  7. ff02::2 ip6allrouters

3.2.安装 Proxmox VE

配置 repository
  1. echo “deb http://download.proxmox.com/debian/pve stretch pve-no-subscription” >/etc/apt/sources.list.d/pveinstallrepo.list
  2. wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
  3. apt update && apt distupgrade
遇到如下界面选择keep the local version回车即可:
 
 
安装 Proxmox VE 包
  1. apt install proxmoxve postfix openiscsi
遇到以下提示,由于我们只是来跑 PT,我们选择local only即可:
 
 
然后重启你的系统 proxmox5.X 就安装完成了!

4.配置 Proxmox 及 samba

4.1.开启 BBR 及 ipv4、ipv6 转发

编辑/etc/sysctl.conf
按 Ctrl+K 清空原有所有配置,改成如下
  1. net.core.default_qdisc=fq
  2. net.ipv4.tcp_congestion_control=bbr
  3. net.ipv4.conf.all.rp_filter=1
  4. net.ipv4.icmp_echo_ignore_broadcasts=1
  5. net.ipv4.conf.default.forwarding=1
  6. net.ipv4.conf.default.proxy_arp = 0
  7. net.ipv4.ip_forward=1
  8. kernel.sysrq = 1
  9. net.ipv4.conf.default.send_redirects = 1
  10. net.ipv4.conf.all.send_redirects = 0
  11. net.ipv6.conf.eth0.autoconf=0
  12. net.ipv6.conf.eth0.accept_ra=2
  13. net.ipv6.conf.default.forwarding=1
  14. net.ipv6.conf.all.forwarding=1
  15. net.ipv6.conf.default.proxy_ndp=1
  16. net.ipv6.conf.all.proxy_ndp=1
注意:上面的 eth0 改成你对应的主端口!
然后执行以下命令使设置生效
  1. sysctl p

4.2.配置网络端口

执行命令
  1. ip addr
 
 
如上图,这里的主端口是 eth0,也就是绑定了你 ipv4 和 ipv6 地址的端口,根据你的情况看!
于是我们要修改/etc/network/interface文件,默认的如下
  1. # Generated by the DigitalOcean provisioning process on 2018-04-09T13:42:50Z
  2. # See ‘man interfaces’ on a Debian/Ubuntu systems.
  3. # The network configuration was generated from http://169.254.169.254/metadata/v1.json.
  4. # You may also find the it on the locally attached CDROM under ‘digitalocean_meta_data.json’
  5.  
  6. auto lo
  7. iface lo inet loopback
  8. dnsnameservers  67.207.67.2 67.207.67.3
  9.  
  10. auto eth0
  11. iface eth0 inet static
  12. hwaddress 5e:9a:17:e6:df:9d
  13. address   167.99.172.150
  14. netmask   255.255.240.0
  15. gateway   167.99.160.1
  16. postup ifup eth0:1
  17. postup ifup eth0:2
  18.  
  19. auto eth0:1
  20. iface eth0:1 inet6 static
  21. hwaddress 5e:9a:17:e6:df:9d
  22. address   2604:A880:0002:00D0:0000:0000:0ADD:1001/64
  23. gateway   2604:a880:0002:00d0:0000:0000:0000:0001
  24.  
  25. auto eth0:2
  26. iface eth0:2 inet static
  27. hwaddress 5e:9a:17:e6:df:9d
  28. address   10.46.0.6/255.255.0.0
 
我们将其改成如下内容
  1. # Generated by the DigitalOcean provisioning process on 2018-04-09T13:42:50Z
  2. # See ‘man interfaces’ on a Debian/Ubuntu systems.
  3. # The network configuration was generated from http://169.254.169.254/metadata/v1.json.
  4. # You may also find the it on the locally attached CDROM under ‘digitalocean_meta_data.json’
  5.  
  6. auto lo
  7. iface lo inet loopback
  8. dnsnameservers  67.207.67.2 67.207.67.3
  9.  
  10. auto vmbr0
  11. iface vmrb0 inet static
  12. hwaddress 5e:9a:17:e6:df:9d
  13. address   167.99.172.150
  14. netmask   255.255.240.0
  15. gateway   167.99.160.1
  16. postup ifup vmbr0:1
  17.  
  18. auto vmbr0:1
  19. iface vmbr0:1 inet6 static
  20. hwaddress 5e:9a:17:e6:df:9d
  21. address   2604:A880:0002:00D0:0000:0000:0ADD:1001/64
  22. gateway   2604:a880:0002:00d0:0000:0000:0000:0001
  23.  
  24. auto vmbr1
  25. iface vmbr1 inet static
  26. address 192.168.1.254
  27. netmask 255.255.255.0
  28. bridge_ports none
  29. bridge_stp off
  30. bridge_fd 0
  31. postup iptables t nat A POSTROUTING ‘192.168.1.0/24’ o vmbr0  j MASQUERADE
  32. postdown iptables t nat D POSTROUTING ‘192.168.1.0/24’ o vmbr0  j MASQUERADE
  33. postup iptables t nat A PREROUTING i vmbr0 p tcp dport 3389 j DNAT to 192.168.1.10:3389
  34. postdown iptables t nat D PREROUTING i vmbr0 p tcp dport 3389 j DNAT to 192.168.1.10:3389
  35. postup iptables t nat A PREROUTING i vmbr0 p tcp dport 8888 j DNAT to 192.168.1.10:8888
  36. postdown iptables t nat D PREROUTING i vmbr0 p tcp dport 8888 j DNAT to 192.168.1.10:8888
  37. postup iptables t nat A PREROUTING i vmbr0 p tcp dport 9999 j DNAT to 192.168.1.10:9999
  38. postdown iptables t nat D PREROUTING i vmbr0 p tcp dport 9999 j DNAT to 192.168.1.10:9999
  39. postup iptables t nat A PREROUTING i vmbr0 p udp dport 9999 j DNAT to 192.168.1.10:9999
  40. postdown iptables t nat D PREROUTING i vmbr0 p udp dport 9999 j DNAT to 192.168.1.10:9999
  41.  
  42. auto vmbr2
  43. iface vmbr2 inet6 static
  44. address 2604:a880:2:d0::add:1002
  45. netmask 64
  46. bridge_ports none
  47. bridge_stp off
  48. bridge_fd 0
  49. postup echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
  50. postup echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
  51. postup echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
  52. postup /sbin/ip f inet6 neigh add proxy 2604:a880:2:d0::add:1002 dev vmbr2
  53. postup /sbin/ip f inet6 neigh add proxy 2604:a880:2:d0::add:1003 dev vmbr0
  54. postup /sbin/ip f inet6 route add 2604:a880:2:d0::add:1003 dev vmbr2
保存退出,然后执行命令
  1. /etc/init.d/networking restart
这样我们的网络就配置好了

4.3.配置 samba

安装 samba
  1. aptget update
  2. aptget install samba
编辑/etc/samba/smb.conf 文件,在最后添加如下内容
  1. [models]
  2. path = /home/ptdown
  3. available = yes
  4. browsable = yes
  5. writable = yes
  6. create mask = 0777
  7. write list = windows
给文件夹权限
  1. chmod 777 /home/ptdown
添加 samba 用户,并设置密码
  1. adduser windows
  2. smbpasswd a windows
重启 samba 服务让设置生效
  1. /etc/init.d/samba reload
  2. /etc/init.d/samba restart

5.安装 windows 系统

这里我们的 IP 是167.99.172.150,于是我们打开
  1. https://167.99.172.150:8006
然后输入你的 root 账户登录就行了,语言可选 Chinese 中文!界面如下:
 
 

5.1.下载镜像

首先我们需要下载 windows 的镜像,这里我们选择安装 windows2008_R2 系统,并将镜像放到/var/lib/vz/template/iso/目录

5.2.创建虚拟机

①点击右上角的创建虚拟机,随便设置个名称,点下一步。
②操作系统:镜像文件选择刚才的那个 ISO,设置如下图,根据你要安装的 windows 版本设置,这里是 win2008_r2:
 
 
③硬盘:大小随意设置,最低 30G 吧,这个无所谓!其它设置默认,不影响操作!
④CPU:如果你是 i3/i5,核那里选择 2 就可以了一般,i7/E3 之类的可以选择 3 或者 4,根据你的服务器情况,这个可以随时更改的,没关系~
⑤内存:一般设置成 2048 也就是 2G 就可以了,win2008 不怎么耗内存的!
⑥网络:选择桥接模式,桥接刚才我们创建的那个 vmbr1 端口就可以了!
最后确认完成就 OK 了
接下来点击启动我们选中左边刚创建的那个虚拟机,然后点击启动,再点控制台:

 
5.3.安装 win2008
打开控制台后,首先点击下一步,然后点击立即安装,然后选择下图中的那项点下一步
 
然后接受条款,下一步,然后选择自定义安装,下一步,然后直接下一步开始 win2008 的安装,接下来等个几分钟就可以进入系统了。

5.4.配置网络

进入系统后,首先我们将 windows 防火墙关闭,然后我们配置网络如下,保存设置,这样网络就通了.
 

配置 samba

我们在之前在 linux 上配置好了 samba,现在只用连接就行了,打开计算机
 
然后点浏览,点击这个 IP 地址,然后输入用户名密码,就是你之前设置的那个 samba 用户名密码,然后选中 models,确认再确认就行了,于是你的电脑多了一个 Z 盘,这就是你的 linux 上的那个目录!
此时,windows 与 linux 已经文件互通了,因为是内网,虽然是挂载的,但跟本地磁盘没有区别!!

6.使用说明

6.1.远程桌面

在 windows 下,因为上面设置了 3389 端口转发,win 远程桌面的默认端口,所以你可以在任意一台 windows 电脑上运行 mstsc 打开远程桌面连接,如下,然后输入你刚才设置的密码,用户名是 administrator,即可远程连接!如何你没有设置 3389,比如 3390,那么你可以在计算机那里输入 IP:3390 即可连接!
 

6.2.utorrent 使用

由于我上面只转发了 3389 以及 8888 和 9999 端口,其中 3389 用于远程桌面,所以 8888 和 9999 可以分别用于 utorrent 的 webui 和连接端口,在 utorrent 中设置如下
 
 

7.常见问题

7.1.interface 文件详解

解释下上面的各种配置
vmbr0~vmbr2: proxmox 的虚拟端口,你可以接着按这个示例添加!
post_up-post_down:设置端口转发的,因为服务器大部分就一个 IP,这样可以设置端口转发,让外界直接和虚拟机通信
vmbr2:上面红色的内容表示添加了一个额外的 ipv6 地址,大多数服务商给的 ipv6 都是/64 之类的,其实这就意味着,你拥有很多很多很多地址,所以你可以按照上面示例接着在后面添加地址,比如这里就是下面这个
  1. postup /sbin/ip f inet6 neigh add proxy 2604:a880:2:d0::add:1004 dev eth0
  2. postup /sbin/ip f inet6 route add 2604:a880:2:d0::add:1004 dev vmbr2
配置 ipv6 地址
首先为虚拟机添加一个新的网络接口 vmbr2,它本身 ipv6 地址就作为网关地址,你自己添加的额外的 ipv6 地址就作为虚拟机的地址,ipv6 的 DNS 就设置为 google 的就可以了 2001:4860:4860::8888 和 2001:4860:4860::8844,然后小鸡的 ipv6 不出意外就通了,理论上硬件允许的话你可以开无限个虚拟机
 

7.2.免重启添加转发规则

比如我们在 vmbr1 下新加了一个转发 6666 到虚拟机 6666 的规则,我们可以执行以下命令
  1. ifdown vmbr1
  2. ifup vmbr1
然后在虚拟机的网络切换那里把网络端口随便切换一个,再切换回来,就直接生效了!

7.3.添加额外的独立 IP

这个很简单,主要一般是要绑定 MAC
以 SYS 系列为例,假设我买了个 IP 192.168.1.100,然后后台有个地方可以设置 Virtual Mac,设置好了,把新添加的虚拟机的 mac 改成这个 Vitual Mac,然后设置
IP 地址:192.168.1.100,
掩码:255.255.255.255
网关:192.168.1.254
记住桥接网络端口是你的默认的网络端口,比如我这里是 vmbr0!
即可,其它主机商类似,可以看看他们的配置 WIKI!

7.4.KVM 虚拟机无法关机

centos 执行
yum install acpid
debian/ubuntu 执行
apt-get install acpid

7.5.虚拟机自启动

选中你要自启动的虚拟机,选中右边的选项,开机自启动设置为是即可

7.6.配置集群

7.6.1.对于内网的机器

假设三台机器,IP 分别为
机器 A:192.168.100.10
机器 B:192.168.100.11
机器 C:192.168.100.12
全新安装完 proxmox 后,假设 A 为主机,在主机上执行
pvecm create YOUR-CLUSTER-NAME
在其它需要加入的小鸡上执行
pvecm add 192.168.1.10
这样就添加成功了,注意,必须是同一个网段!!!

7.6.2.对于外网的机器

这个主要涉及到跨网段,我说个思路吧
假设三台机器,hostname 分别为 a、b、c,IP 分别为
机器 A:92.18.24.10
机器 B:12.16.87.11
机器 C:19.68.64.12
那么我们需要做两件事,第一是修改 hostname,这是写下 a 的示例,b,c 类似
  1. 127.0.0.1 localhost.localdomain localhost
  2. 92.18.24.10 a.proxmox.com a pvelocalhost
  3.  
  4. # corosync network hosts
  5. 10.10.1.151 acorosync.proxmox.com acorosync
  6. 10.10.1.152 bcorosync.proxmox.com bcorosync
  7. 10.10.1.153 ccorosync.proxmox.com ccorosync
  8.  
  9. # The following lines are desirable for IPv6 capable hosts
  10. ::1     localhost ip6localhost ip6loopback
  11. ff02::1 ip6allnodes
  12. ff02::2 ip6allrouters
然后我们需要为每个虚拟机添加一个新的 corosync 端口,然后你需要通过 GRE 隧道之类的方式打通这三个 corosync 端口,实现三个机器诸如 10.10.1.X 这样的内网 IP 能互相 PING 的通!
然后我们假设 A 为主机,在 a 上执行命令创建集群
pvecm create YOUR-CLUSTER-NAME -bindnet0_addr 10.10.1.151 -ring0_addr a-corosync
在 b、c 上分别执行命令加入集群
pvecm add 92.18.24.10 -ring0_addr b-corosync
pvecm add 92.18.24.10 -ring0_addr c-corosync
这样就可以了!!

7.7.配置 NFS 存储

proxmox 其实是支持自定义定时备份的,但需要一个存储系统,好像支持的很多,我选了 nfs,然后对于备份,还是别在同一台机器,这里的教程是针对 debian 系统的!如下
安装 nfs
apt-get install nfs-kernel-server
创建共享目录
mkdir /home/nfs
编辑/etc/exports 文件,在文件末添加共享目录信息
/xx/xxx/ *(rw,sync,no_root_squash)
*填写你所允许的客户端 IP,也就是 proxmox 服务器的 IP,/xx/xxx/是共享目录,这里我们是/home/nfs,配置完成后我们保存退出,执行命令使配置生效
exportfs -r
然后点击 proxmox 主页左边的数据中心,右边的存储,添加 nfs,然后配置如下
 
其中 ID 随便设置,服务器就是你刚配置 nfs 的服务器 IP,Export 就是你设置的共享目录,内容里面可以选择支持备份的对象。

8.总结

其实很简单,我所有的 IP 用的都是实例中的,你只要对着设置肯定没错,简单说就是最后实现了硬盘空间在 linux 和 windows 上的互通,
在这篇文章中,我们最开始的设置的 linux 的 samba 目录是/home/ptdown,最后就是这个/home/ptdown 挂载到了 windows 的 Z 盘上而已。
至此你可以猥琐欲为了。linux 下可以支持安装各种 PT 客户端,下载目录设置成共享的目录,windows 上便可以直接在挂载的盘中看到.
------------

Howto setup a Debian 9 with Proxmox and containers using as few IPv4 and IPv6 addresses as possible

 
My current Linux Root-Server needs to be replaced with a newer Linux version and should also be much cheaper then the current one. So at first I did look what I don’t like about the current one:
  • It is expensive with about 70 Euros / months. Following is responsible for that
    • My own HPE hardware with 16GB RAM and a software RAID (hardware raid would be even more expensive) – iLo (or something like it) is a must for me 🙂
    • 16 additional IPv4 addresses for the visualized container and servers
    • Large enough backup space to get back some days.
  • A base OS which makes it hard to run newer Linux versions in the container (sure old ones like CentOS6 still get updates, but that will change)
    • Its time to move to newer Linux versions in the containers
  • OpenVZ based containers which are not mainstream anymore
Then I looked what surrounding conditions changed since I did setup my current server.
  • I’ve IPv6 at home and 70% of my traffic is IPv6 (thx to Google (specially Youtube) and Cloudflare)
  • IPv4 addresses got even more expensive for Root-Servers
  • I’m now using Cloudflare for most of the websites I host.
  • Cloudflare is reachable via IPv4 and IPv6 and can connect back either with IPv4 or IPv6 to my servers
  • With unprivileged containers the need to use KVM for security lessens
  • Hosting providers offer now KVM servers for really cheap, which have dedicated reserved CPUs.
  • KVM servers can host containers without a problem
This lead to the decision to try following setup:
  • A KVM based Server for less than 10 Euro / month at Netcup to try the concept
  • No additional IPv4 addresses, everything should work with only 1 IPv4 and a /64 IPv6 subnet
  • Base OS should be Debian 9 (“Stretch”)
  • For ease of configuration of the containers I will use the current Proxmox with LXC
  • Don’t use my own HTTP reverse proxy, but use exclusively Cloudflare for all websites to translate from IPv4 to IPv6
After that decision was reached I search for Howtos which would allow me to just set it up without doing much research. Sadly that didn’t work out. Sure, there are multiple Howtos which explain you how to setup Debian and Proxmox, but if you get into the nifty parts e.g. using only minimal IP addresses, working around MAC address filters at the hosting providers (which is quite a important security function, BTW) and IPv6, they will tell you: You need more IP addresses, get a really complicated setup or just ignore that point at all.
As you can read that blog post you know that I found a way, so expect a complete documentation on how to setup such a server. I’ll concentrate on the relevant parts to allow you to setup a similar server. Of course I did also some security harding like making a secure ssh setup with only public keys, the right ciphers, …. which I won’t cover here.
Setting up the OS
I used the Debian 9 minimal install, which Netcup provides, and did change the password, hostname, changed the language to English (to be more exact to C) and moved the SSH Port a non standard port. The last one I did not so much for security but for the constant scans on port 22, which flood the logs.
passwd
vim /etc/hosts
vim /etc/hostname
dpkg-reconfigure locales
vim /etc/ssh/sshd_config
/etc/init.d/ssh restart
I followed that with making sure no firewall is active and installed the net-tools so I got netstat and ifconfig.
apt install net-tools
At last I did a check if any packages needs an update.
apt update
apt upgrade
Installing Proxmox
First I checked if the IP address returns the correct hostname, as otherwise the install fails and you need to start from scratch.
hostname --ip-address
Adding the Proxmox Repos to the system and installing the software:
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
apt update && apt dist-upgrade
apt install proxmox-ve postfix open-iscsi
After that I did a reboot and booted the Proxmox kernel, I removed some packages I didn’t need anymore
apt remove os-prober linux-image-amd64 linux-image-4.9.0-3-amd64
Now I did my first login to the admin GUI to https://:8006/ and enabled the Proxmox firewall:
Then set the firewall rules for protecting the host (I did that for the whole datacenter even if I only have one server at this moment). Ping is allowed, the Webgui and ssh:
I make sure with:
iptables -L -xvn
that the firewall was running.
BTW, if you don’t like the nagging windows at every login that you need a license and if this is only a testing machine as mine is currently, type following:
sed -i.bak 's/NotFound/Active/g' /usr/share/perl5/PVE/API2/Subscription.pm && systemctl restart pveproxy.service
Now we need to configure the network (vmbr0) for our virtual systems and this is the point where my Howto will go an other direction. Normally you’re told to configure the vmbr0 and put the physical interface into the bridge. This bridging mode is the easiest normally, but won’t work here.
Routing instead of bridging
Normally you are told that if you use public IPv4 and IPv6 addresses in containers you should bridge it. Yes thats true, but there is one problem. LXC containers have their own MAC addresses. So if they send traffic via the bridge to the datacenter switch, the switch sees the virtual MAC address. In a internal company network on a physical host that is normally not a problem. In a datacenter where different people rent their servers thats not good security practice. Most hosting providers will filter the MAC addresses on the switch (sometimes additional IPv4 addresses come with the right to use additional MAC addresses, but we want to save money here 🙂 ). As this server is a KVM guest OS the filtering is most likely part of the virtual switch (e.g. for VMware ESX this is the default even).
With ebtables it is possible to configure a SNAT for the MAC addresses, but that will get really complicated really fast – trust me with networking stuff – when I say complicated it is really complicated fast. 🙂
So, if we can’t use bridging we need to use routing. Yes the routing setup on the server is not so easy, but it is clean and easy to understand.
First we configure the physical interface in the admin GUI:
...
 
from https://robert.penz.name/1483/howto-setup-a-debian-9-with-proxmox-and-containers-using-as-few-ipv4-and-ipv6-addresses-as-possible/
--------------------------------


proxmox的安装与使用

前言

最近入手了一台杜甫,但是天天吃灰,所以最近研究了一下proxmox,打算在上面装上Windows和linux啥啥啥的一机多用。

安装

准备

proxmox只能安装在debian上,所以确保你的系统是debian,最好是升级到debian9,如果主机商没有提供debian9的话,可以按照以下方法升级。
debian7升级到debian8
  1. apt-get update
  2. apt-get upgrade
  3. sed s/wheezy/jessie/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. apt-get update
  5. apt-get upgrade
  6. apt-get dist-upgrade
 
debian8升级到debian9
  1. apt-get update
  2. apt-get upgrade
  3. sed s/jessie/stretch/ /etc/apt/sources.list | tee /etc/apt/sources.list
  4. apt-get update
  5. apt-get upgrade
  6. apt-get dist-upgrade
 
期间遇到任何提示都选择 Y 就行了,最后都执行完了后执行 reboot 重启系统!
反正总之就是你需要 debian9 的系统!!!!!

安装proxmox

proxmox 是一款只支持 debian 系统的虚拟化环境,可以安装基于 KVM 和 LXC(openvz 进化版)的虚拟机,使用很方便,有图形界面。接下来安装 proxmox5.X 系列。

编辑/etc/hosts

比如你登录服务器后显示root@server1,那么你的服务器的名称就是server1, 你可以通过修改/etc/hostname文件修改它。然后你需要保持你的/etc/hosts 文件如下:
  1. 127.0.0.1 localhost.localdomain localhost
  2. 167.99.172.150 server1.proxmox.com server1 pvelocalhost
  3. # The following lines are desirable for IPv6 capable hosts
  4. ::1 localhost ip6-localhost ip6-loopback
  5. ff02::1 ip6-allnodes
  6. ff02::2 ip6-allrouters
 

安装 Proxmox VE

配置 repository
  1. echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
  2. wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
  3. apt update && apt dist-upgrade
 
遇到如下界面选择keep the local version回车即可:
 
安装 Proxmox VE 包
  1. apt install proxmox-ve postfix open-iscsi
 
遇到以下提示,我们选择local only即可:
 
然后重启你的系统 proxmox5.X 就安装完成了!

配置 Proxmox

配置IPV4网络

开启 BBR 及 ipv4转发
编辑/etc/sysctl.conf
按 Ctrl+K 清空原有所有配置,改成如下
  1. net.core.default_qdisc=fq
  2. net.ipv4.tcp_congestion_control=bbr
  3. net.ipv4.conf.all.rp_filter=1
  4. net.ipv4.icmp_echo_ignore_broadcasts=1
  5. net.ipv4.conf.default.forwarding=1
  6. net.ipv4.conf.default.proxy_arp = 0
  7. net.ipv4.ip_forward=1
  8. kernel.sysrq = 1
  9. net.ipv4.conf.default.send_redirects = 1
  10. net.ipv4.conf.all.send_redirects = 0
 
然后执行以下命令使设置生效
  1. sysctl -p
 
执行命令
  1. ip addr
 

如上图,这里的主端口是 eth0,也就是绑定了你 ipv4 和 ipv6 地址的端口,根据你的情况看!
我们要修改/etc/network/interfaces文件,如下
  1. auto lo
  2. iface lo inet loopback
  3.  
  4. auto eno1
  5. iface eno1 inet static
  6. address 你的IP
  7. netmask 255.255.255.0
  8. gateway 你的网关
  9. auto vmbr0
  10. #private sub network
  11. iface vmbr0 inet static
  12. address 10.10.10.1
  13. netmask 255.255.255.0
  14. bridge_ports none
  15. bridge_stp off
  16. bridge_fd 0
  17.  
  18. post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
  19. post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
  20. post-up iptables -t nat -A PREROUTING -i eno1 -p tcp --dport 3389 -j DNAT --to 10.10.10.100:3389
  21. post-down iptables -t nat -D PREROUTING -i eno1 -p tcp --dport 3389 -j DNAT --to 10.10.10.100:3389
  22.  
 
保存退出,然后执行命令
  1. /etc/init.d/networking restart
 

配置IPV6网络

我的服务器在ONLINE,且官方给的教程安装,不适用于最新的ProxmoxVE环境,即使按照教程修改配置好,又会出现一个小时左右就断开连接的问题,所以我们另外使用odhcp6c来获得IPv6地址。
首先安装软件源,编辑/etc/apt/sources.list添加以下内容:
  1. #DHCP6 Client
  2. deb http://httpredir.debian.org/debian experimental main
 
然后安装odhcp6c
  1. apt-get update
  2. apt-get install odhcp6c
 
通过ifconfig查看你的物理网卡的名称,例如eno1
通过online网页的服务器控制台得到IPv6地址信息,如果你是oneprovider的用户,需要发工单获取ipv6DUID信息:
  1. IPv62001:123:456:789::1/64
  2. DUID00:03:00:01:3f:12:34:56:78:90
 
/etc/network/interfaces中添加以下内容
  1. post-up odhcp6c -P 64 -c 00:03:00:01:3f:12:34:56:78:90 eno1 -d
  2. post-up ip -6 a a 2001:123:456:789::1/64 dev eno1
 
重启服务器后即可获得IPv6地址。
首先,配置IPv6网络,编辑/etc/modprobe.d/local.conf,修改或者添加如下内容:
  1. options ipv6 disable=0
 
编辑/etc/modules,添加如下字符:
  1. ipv6
 
开启IPv6转发,编辑/etc/sysctl.conf,添加以下内容到尾部:
  1. net.ipv6.conf.eno1.autoconf=0
  2. net.ipv6.conf.eno1.accept_ra=2
  3. net.ipv6.conf.default.forwarding=1
  4. net.ipv6.conf.all.forwarding=1
  5. net.ipv6.conf.default.proxy_ndp=1
  6. net.ipv6.conf.all.proxy_ndp=1
 
其中红色部分修改为自己的网卡名:
  1. net.ipv6.conf.eno1.autoconf=0
  2. net.ipv6.conf.eno1.accept_ra=2
 
接着执行以下命令,使配置生效。
  1. sysctl -p
 
最后,编辑/etc/network/interfaces,内容如下:
  1. auto lo
  2. iface lo inet loopback
  3.  
  4. auto eno1
  5. iface eno1 inet static
  6. address 你的IP
  7. netmask 255.255.255.0
  8. gateway 你的网关
  9.  
  10. auto vmbr0
  11. iface vmbr0 inet static
  12. address 10.10.10.1
  13. netmask 255.255.255.0
  14. bridge-ports none
  15. bridge-stp off
  16. bridge-fd 0
  17.  
  18. iface vmbr0 inet6 static
  19. address 你的IPV6地址::2
  20. netmask 64
  21.  
  22. post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
  23. post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
  24. post-up iptables -t nat -A PREROUTING -i eno1 -p tcp --dport 3389 -j DNAT --to 10.10.10.100:3389
  25. post-down iptables -t nat -D PREROUTING -i eno1 -p tcp --dport 3389 -j DNAT --to 10.10.10.100:3389
  26. post-up odhcp6c -P 64 -c 你的DUID eno1 -d
  27. post-up ip -6 a a 你的IPV6地址::1/64 dev eno1
  28. post-up ip -f inet6 neigh add proxy IPV6::2 dev vmbr0
  29. post-up ip -f inet6 neigh add proxy IPV6::3 dev eno1
  30. post-up ip -f inet6 route add IPV6::3 dev vmbr0
 
post-up ip -f inet6 neigh add proxy IPV6::2 dev vmbr0这一行是添加虚拟网卡的转发。
需要把上面的eno1改成你实际使用的接口,实际使用的接口可以用ifconfig来查看,另外,上面只针对一个IPV6地址进行了转发,如果你有多个IPV6地址需要转发,需要添加如下格式的配置。
  1. post-up ip -f inet6 neigh add proxy IPV6::3 dev eno1
  2. post-up ip -f inet6 route add IPV6::3 dev vmbr0
 
重启服务器,使设置生效。
免重启添加转发规则
比如我们在 vmbr1 下新加了一个转发 6666 到虚拟机 6666 的规则,我们可以执行以下命令
  1. ifdown vmbr1
  2. ifup vmbr1
 
然后在虚拟机的网络切换那里把网络端口随便切换一个,再切换回来,就直接生效了!
--------------

使用Proxmox开KVM独立IP的VPS

 
----------------

独服上,安装proxmox的过程

 
独服安装proxmox系统的步骤。proxmox是一个管理虚拟机的软件,基于debian系统运行。使用proxmox可以方便的创建和管理KVM虚拟机和OPENVZ虚拟机。
第一步:选择要安装proxmox的机器。按下图1 2 3 的位置分辨点击。进入救援模式(Rescue)设置界面。
 
选择要安装proxmox的机器
选择要安装proxmox的机器
 
第二步:设置好救援模式,然后点“Activate rescue system”按钮提交。
 
设置救援模式
设置救援模式
 
点击“Activate rescue system”按钮以后,会出现一个提交成功的界面,这个界面的最后一行显示了一个密码,把这个密码保存好,一会登陆ssh要用。
 
救援模式设置成功
救援模式设置成功
 
第三步:点击“reset”标签,然后选择第二个选项:Execute an automatic hardware reset,再点“send”按钮重启。
 
重启机器
重启机器
 
第四部:等待一会,机器重启完成后用ssh连接,用户是root,密码就是刚才设置救援模式成功后显示的那个密码。登陆成功后,执行installimage,在弹出的界面选择other,再选择Proxmox....Debian-Strech,然后会弹出2个提示框,直接点确定即可。最后进入安装配置文件的编辑界面。
 
选择要安装的系统
选择要安装的系统
 
 
 
选择要安装的系统
选择要安装的系统
 
 
安装配置界面
安装配置界面
 
在这个界面可以设置raid模式,主机名,磁盘分区等信息。按照需求修改好后,按F10保存退出,系统安装就开始了。等待10分钟左右安装完毕,然后重启。新系统的登陆用户还是root,密码也是救援模式显示的密码。
注意:后来我新买了hetzner家其他机房的机器,有的机房机器安装proxmox时会失败。如果遇到安装不成功的情况,可以先在installimage时选择Debian,再选Debian-94-Stretch-64-minimal这个系统安装(因为proxmox是基于debian系统的)。系统安装完毕后,参考proxmox官方说明另外proxmox。如果此时遇到问题或者有便宜看不明白官方的说明,可以给我留言,我稍后再补充教程。
proxmox安装完毕后,下一步是配置母鸡的网络。我个人使用,没有打算另外购买IP,所以研究的是配置NAT网络,使用一个IP开NAT小鸡。请点这里查看如何给proxmox配置NAT网络开小鸡。
------------

独服安装proxmox后,配置NAT网络(为单IP创建多个虚拟机做准备)

 
本文的前提是HETZNER家的机器已经安装好了proxmox,如果还没有安装好,请转到:https://mengniuge.com/hetzner-proxmox-install.html查看安装步骤。本人使用的场景是单IP开NAT虚拟机,如果您购买了多个IP,就不要往下看了。
一、登陆proxmox后台后,按照下图箭头依次点击链接,进入网络设置。新建一个网络桥接接口。
 
proxmox网络设置
proxmox网络设置
 
二、填写IP和子网掩码,IP地址填写个局域网的网段地址就行,子网掩码就填255.255.255.0。其他项目不用填也不用改,保持默认(不用IPV6的情况下)。IPV6我还没有折腾过,这里暂时不设置IPV6信息。
 
网络接口设置
网络接口设置
 
三、开启系统的转发功能,很简单,执行一条命令:echo 1 > /proc/sys/net/ipv4/ip_forward
特别说明:这条命令在之前的kimsufi的机器上使用正常。但是在这家Hetzner机器上使用没有效果,创建好的虚拟机无法连接外网。直接编辑文件/etc/sysctl.conf,增加net.ipv4.ip_forward = 1,也许之前有这一行,但是有注释,取消注释就行了。保存后执行sysctl -p就会生效。实测这样执行后,不能联网的虚拟机就恢复正常了。
四、配置iptables,先设置出站的nat转发。执行的命令是:iptables -t nat -A POSTROUTING -s '10.20.20.0/24' -o enp2s0 -j MASQUERADE。其中10.20.20.0根据刚才填写的IP修改。enp2s0是在“网络”页看到的配置有外网IP的那个网络接口。不同机器会有区别,例如kimsufi的机器安装proxmox后的外网接口是vmbr0。
特别说明:第三、四步的操作很多网上的教程(应该都是根据proxmox官网资料写的)都是通过写入/etc/network/interfaces文件的方式实现的(原因可能是Debian系统默认不支持保存iptables规则)。例如(官方例子):
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
但是这种方式有2个缺点,1:每条转发规则都要配置2行,分别是post-up时添加规则和post-down时删除规则。不知道不写post-down的话会怎么样。2:修改转发规则后,必须执行service networking restart重启网卡才能使修改生效。而重启网卡会导致整机瞬间断网,如果有需要保持长连接的业务,会受到严重影响。而我之前的实际使用中,即使重启网卡新规则也不会生效,必须重启母鸡才可以。这是更加不可接受的。其实这种方式就是通过网络配置文件自动执行iptables命令而已,还不如直接设置好iptables。直接使用iptables的话,修改了转发规则会立即生效,不用重启网络,也不用每个规则需要2条命令。下一步解决Debian系统重启后无法保持iptables规则的问题。
第五步、解决Debian系统重启后不保持iptables设置的问题:

 
 
1
2
3
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
在打开的编辑器里面输入以下文本,然后保存退出:

 
 
1
2
#!/bin/sh
/sbin/iptables-restore < /etc/iptables
这样设置后,每次开机会从/etc/iptables读取iptables设置。修改iptables规则后,执行iptables-save > /etc/iptables这个命令就会把设置好的iptables规则保存到/etc/iptables这个文件。这样就不怕重启后丢失iptables设置了。
例如:
增加一条NAT转发规则并保存
 
 
1
2
iptables -t nat -A PREROUTING -i enp2s0 -p tcp --dport 21 -j DNAT --to 10.20.20.102:21
iptables-save > /etc/iptables
至此,单IP开多个小鸡的网络基础准备工作已经做好了,剩下的工作就是创建小鸡并在小鸡里设置小鸡的网络了。
注意:这样设置的NAT网络,虚拟机不能通过母机的外网IP访问到该母鸡上的任何虚拟机的网络。这涉及到NAT网络的“回流”问题。解决方法请查看本博客文章:iptables回流设置方法
--------
 

独服通过proxmox开小鸡的步骤

 
本文的前提是Hetzner家的独服安装好了proxmox,并且在系统内做好了NAT设置。本文使用的情况是单IP开设虚拟机。如果购买了多IP,就不用往下看了。
创建KVM虚拟机需要使用ISO镜像安装虚拟机的系统,所以要提前把想用的ISO镜像文件保存到/var/lib/vz/template/iso目录内。
首先点击右上角的“创建虚拟机”:
 
点击创建虚拟机
点击创建虚拟机
 
打开的界面如下:
 
创建虚拟机步骤1
创建虚拟机步骤1
 
VM ID是虚拟机编号,系统默认是从100递增,没有特殊需要不要改。名称随便填个易于识别的名字即可。这里演示的是在虚拟机安装CENTOS7系统。填好后点“下一步”,选择ISO镜像:
 
创建虚拟机:选择ISO镜像
创建虚拟机:选择ISO镜像
 
选择镜像文件后,点“下一步”,进入硬盘设置:
 
创建虚拟机-设置硬盘
创建虚拟机-设置硬盘
 
这里主要是设置磁盘大小。其他保持默认就行。然后“下一步”是CPU设置:
 
创建虚拟机-设置CPU
创建虚拟机-设置CPU
 
这里主要是设置CPU核心数。根据需要设置就行。官方文档建议勾选NUMA选项,说是可以提高性能,那就勾选吧。然后“下一步”,进入内存设置:
 
创建虚拟机-设置内存
创建虚拟机-设置内存
 
根据需要设置内存大小。Ballooning据官方文档说是提供客户机内存使用等信息的东西,应该可有可无。以前看到有人说会引起不稳定,不知道是不是真的。看心情决定是否勾选吧。有特殊需求可以选择动态分配内存,但是WINDOWS系统不要用。设置好后“下一步”,进入网络设置:
 
创建虚拟机:网络设置
创建虚拟机:网络设置
 
这里选择桥接模式,桥接的接口是之前配置NAT时设置的接口,模型可以选Intel E1000或者VirtIO (半虚拟化)。根据官方文档,Intel E1000是模拟英特尔千兆网卡(客户机应该不用额外的驱动);VirtIO (半虚拟化)能提供更高的性能,但是需要客户机安装相应驱动。如果虚拟机要安装windows系统, 尽量选Intel E1000;linux系列的系统可以选VirtIO (半虚拟化)。另外2个模型无需考虑。设置好以后点“下一步”,然后会列出你所有的设置,确认无误后点“完成”按钮,就完成了创建:
 
创建虚拟机
创建虚拟机
 
创建完毕后,可以在左侧列表点选刚刚创建好的虚拟机,然后可以进行一些硬件增删、修改,还有虚拟机的一些选项,见下图:
 
proxmox虚拟机管理
proxmox虚拟机管理
 
检查配置无误后,就可以点击顶部的“启动”按钮启动虚拟机了。启动后,点击中间侧边栏的“控制台”,可以看到虚拟机的显示界面,其他的操作就和本地安装系统没有区别了。
后记:虚拟机安装系统后,遇到了2个问题。问题一:虚拟机可以访问内网,不能访问外网。最后发现是母机IP转发没有开启成功,因为母机执行echo 1 > /proc/sys/net/ipv4/ip_forward没有成功。改用编辑/etc/sysctl文件添加net.ipv4.ip_forward = 1的方式解决。问题二、虚拟机直接ping IP正常,ping域名时解析不出域名的IP。各种检查,最后找到的原因是我使用了Hetzner官网管理后台的Firewall功能,不知道为什么母机DNS解析正常,虚拟机的确不行。增加一条放行规则,Source port为53,Protocol为UDP:
 
Hetzner防火墙放行DNS
Hetzner防火墙放行DNS
 
如果自己需要开的小鸡比较多,或者需要使用的端口或服务比较多,最好还是关掉hetzner后台的firewall,免得总是遇到奇怪的问题。这也是我最后的选择。
from http://archive.is/ufAPa
------------------------------------

单IP服务器利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机

ProxmoxVE是一个集成了KVM、OpenVZ的开源虚拟化管理平台。基于Debian构建。Proxmox有简单易用的WEB控制面板。让用户可以在网页环境中轻松的建立和管理KVM以及OpenVZ构架的虚拟机。
本方法适用于online.net / oneprovider.com和hetzner.de的独立服务器,以及digitalocean.com的VPS服务器。

 1:安装ProxmoxVE

ProxmoxVE有2种安装方式,一种是常见的从ISO引导安装,需要独立服务器提供IPMI远程界面及远程挂载ISO的功能,因为地域网络限制,不方便且速度较慢。另外一种方法是直接在Debian9系统中通过网络安装,通用性较强,且直接安装最新版本,推荐使用。
首先安装标准的Debian9(64位),一般系统模板中提供的Debian9即可。

 为服务器IP地址添加/etc/hosts解析

ProxmoxVE需要主机名可通过/etc/hosts解析,即需要为该主机名分配一个IPv4地址,同时确保未指定主机名的IPv6地址。
例如,服务器IP地址195.154.138.88,我们为主机设定名称为pve,那么文件应该如下所示:
127.0.0.1       localhost.localdomain localhost
195.154.138.88  pve
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
输入命令hostname --ip-address,返回值应该是你的服务器IPv4地址。这一步不可跳过且必须正确配置,这是后续安装顺利进行的保证。
接着添加ProxmoxVE的软件源及密钥,并更新系统,出现选项,选择默认即可。
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg

apt update && apt dist-upgrade -y
安装ProxmoxVE。如果你的服务器没有邮件系统,在出现的选项里面选择local only即可。
apt install proxmox-ve postfix open-iscsi -y
安装结束。

 适用于online.net / oneprovider.com的ipv6安装说明

online.net提供IPv6地址是需要通过DHCP客户端获得,且官方给的教程安装,不适用于最新的ProxmoxVE环境,即使按照教程修改配置好,又会出现一个小时左右就断开连接的问题,所以我们另外使用odhcp6c来获得IPv6地址。
首先安装软件源,编辑/etc/apt/sources.list 添加以下内容:
#DHCP6 Client
deb http://httpredir.debian.org/debian experimental main
然后安装odhcp6c
apt-get update

apt-get install odhcp6c
通过ifconfig查看你的物理网卡的名称,例如eno1
通过online网页的服务器控制台得到IPv6地址信息:
IPv6:2001:123:456:789::1/64

DUID:00:03:00:01:3f:12:34:56:78:90
/etc/network/interfaces中添加以下内容
post-up odhcp6c -P 64 -c 00:03:00:01:3f:12:34:56:78:90 eno1 -d

post-up ip -6 a a 2001:123:456:789::1/64 dev eno1
重启服务器后即可获得IPv6地址。

 2:配置网络

首先,配置IPv6网络,编辑/etc/modprobe.d/local.conf,修改或者添加如下内容:
options ipv6 disable=0
编辑/etc/modules,添加如下字符:
ipv6
开启IPv4,IPv6转发,编辑/etc/sysctl.conf,添加以下内容到尾部:
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.eno1.autoconf=0
net.ipv6.conf.eno1.accept_ra=2
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1
其中红色部分修改为自己的网卡名:
net.ipv6.conf.eno1.autoconf=0
net.ipv6.conf.eno1.accept_ra=2
最后,编辑/etc/network/interfaces,内容如下:
auto lo
iface lo inet loopback
iface lo inet6 loopback

auto eno1
iface eno1 inet static
        address  195.154.138.88
        netmask  255.255.255.0
        gateway  195.154.138.1
iface eno1 inet6 static
        address  2a01:4f8:200:1241::1
        netmask  64
        gateway  fe80::1
#物理网卡配置一般不做改动,系统模板都是配置好的。

auto vmbr0            #为虚拟机新建一个虚拟网桥
iface vmbr0 inet static
        address  10.10.10.1  #内网地址,虚拟机的网关
        netmask  255.255.255.0
        bridge-ports none
        bridge-stp off
        bridge-fd 0
iface vmbr0 inet6 static   #为虚拟机提供IPv6桥接,与主机IPv6地址相同
        address  2001:123:456:789::1
        netmask  64

#转发IPv4流量到虚拟机,使虚拟机与外网联通。
post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE

post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE

#online服务器专用
post-up odhcp6c -P 64 -c 00:03:00:01:3f:12:34:56:78:90 eno1 -d

post-up ip -6 a a 2001:123:456:789::1/64 dev eno1
重启服务器,登录https://195.154.138.88:8006 网页端进行配置。

 3:配置虚拟机

ProxmoxVE可以创建KVM和OpenVZ类型虚拟机。
OpenVZ类型虚拟机是有官方提供的系统模板,可以直接下载使用,KVM需要自己上传ISO镜像进行系统安装。
模板
CPU,内存,硬盘大小等可根据个人需求选择调配。网路部分配置如下
networkconfig
OpenVZ虚拟机的网卡选择桥接在vmbr0上,IPv4地址选择内网地址段,IPv6地址选择对应物理网卡的地址段。DNS可以填写8.8.8.8或者2001:4860:4860::8888.配置完成后,启动虚拟机就可以连接到外网,但是这时只能访问IPv4地址,IPv6这个时候还是不通的,需要在主机输入以下命令开启:
ip -f inet6 neigh add proxy 2001:123:456:789::100 dev eno1

ip -f inet6 route add 2001:123:456:789::100 dev vmbr0
尝试ping google.com以及ping6 ipv6.google.com来检验网络是否通畅。
因为IPv6地址没有内网与外网区分,外网是可以直接通过IPv6地址访问虚拟机,所以也可只配置IPv6信息,不配置IPv4信息。
如果有多台虚拟机,可以为每台虚拟机配置一个IPv6地址。理论上硬件允许的话你可以开无限个IPv6虚拟机。
另一方面,IPv4是经过内网转发的,所以现在只可以访问外网,而外网却无法访问虚拟机。所以我们需要配置端口转发,将外部的访问转发到虚拟机。一般的做法是通过iptables进行转发。
例如在主机中输入命令
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10022 -j DNAT --to-destination 10.10.10.100:22
这样,访问服务器10022端口就会自动转发到虚拟机10.10.10.100的22端口上,实现了外网通过ssh登陆虚拟机的目的。但是,这样做有一个问题,ProxmoxVE自带防火墙,iptables开放22端口,相当于在防火墙上面开了一个洞,而且这个洞不受防火墙的控制,如果需要做安全防护,你还需要单独配置iptables,不是很方便。于是想到一个折中办法,用brook做端口转发,同时利用ProxmoxVE的防火墙进行统一控制。
首先获取brook,项目地址https://github.com/txthinking/brook
在主机中,输入命令,获取最新版brook
ver=$(wget -qO- "https://github.com/txthinking/brook/tags"| grep "/txthinking/brook/releases/tag/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//') && echo ${brook_ver}

wget -O /root/brook https://github.com/txthinking/brook/releases/download/$ver/brook

chmod +x /root/brook
输入命令,启动端口转发
nohup /root/brook relay -l :10022 -r 10.10.10.100:22
利用命令ps -ef|grep brook来查看转发是否生效,同时在ProxmoxVE防火墙中开放或者关闭10022端口来控制外网对虚拟机的访问。
KVM虚拟机的配置是类似的,创建时选择桥接vmbr0,不论安装的是Linux系统还是windows系统,都需要手动输入IPv4和IPv地址,同时在主机配置IPv6信息和添加端口转发。
这样,一个同时开启了NAT和IPv6的虚拟机就创建好了,但是,还有个问题,IPv6的配置和端口转发是会随着主机重启而失效,我们需要在主机上启动开机自启服务,保证每次开机的时候,虚拟机器都能正常工作。
首先,需要在debian9中开启开机自启服务,创建/etc/rc.local,填写:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0
运行命令:
chmod +x /etc/rc.local赋予执行权限
systemctl start rc-local启动服务
这样,我们只需要将需要执行的命令写在/etc/rc.localexit 0前面,就可以在开机后自动执行。
单IP的服务器,可以通过以上方式创建虚拟机。拥有多IP的服务器,需要把物理网卡设置成手动模式iface eno1 inet manual,然后新建一个网桥vmbr1,同时写入物理网卡信息:
vmbr1
独立IP虚拟机配置网卡时选择桥接到vmbr1,并填写独立IP地址,并安照要求绑定MAC地址。不要忘记将所有填写eno1的地方改为vmbr1。

 更改ProxmoxVE的更新源

默认的更新源是订阅用户的更新源,这个是收费的,免费用户更新是失败的,我们需要更改至免费源。
编辑/etc/apt/sources.list,添加:
# PVE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve stretch pve-no-subscription
同时在/etc/apt/sources.list.d/pve-enterprise.list中注释掉
#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise
再次更新,就不会报错。
apt-get update

apt-get dist-upgrade
解决KVM关闭失败的问题
apt-get install acpid
至此,ProxmoxVE的虚拟机环境就配置完成,你可以按照自己的需要建立各类虚拟机,开展各种项目。
from http://archive.is/gmu8H#selection-143.0-619.49
-------------------------------

Proxmox VE


办公室之前使用的虚拟化方案是 XenServer,虚拟机镜像是我自己手搓的。前段时间为了与生产环境的虚拟机镜像统一,试图使用发行版官方的预制 Cloud Image,然后发现 XenServer 无法优雅地使用 cloud-init。考虑到 Xen 的确已经是个夕阳技术了,AWS 前几年也开始抛弃 Xen 了,是时候换一波虚拟机方案了。调查了一番,我选择了 Proxmox VE(简称 PVE)。

一、Proxmox VE 简介

Proxmox Virtual Environment,或 Proxmox VE,是来自德国的开源虚拟化方案。软件和社区支持都是免费的,企业用户则可以通过订阅制获得付费商业支持。
前几年我曾了解过 Proxmox VE,当时 PVE 的重心还在容器化(OpenVZ 和 LXC)上,因此没多做考虑。后来 PVE 的重心渐渐转移到虚拟机上,现在已经是相当成熟的 VM 虚拟化方案了。PVE 的虚拟化核心是 QEMU/KVM,因此可以说是「站在巨人的肩膀上」。QEMU 虽然成熟而强大,但是使用与管理却不够用户友好,PVE 则是补上了这缺失的一环,通过直观的网页管理界面和高效的命令行工具,让各种用户都能愉快地管理虚拟机。
贯彻「不重复造轮子」的原则,当前版本的 PVE 基于成熟稳定的 Debian 9 "Stretch" 构建。在熟悉和使用 PVE 的过程中,我越发喜欢它「不重复造轮子」的特性。相较之前用过的其他虚拟化方案,PVE 的内部构造和工作原理对我来说不再是一个黑盒,我可以清晰地观测到它在干什么——比如要迁移一台虚拟机到另一个节点,我就可以通过 ps 观察到它启动了一个 dd 进程,对接 ssh 管道,将磁盘数据通过网络复制到目标机器——这种仿佛透明手表一样能看到内部工作原理的感觉真是太棒了!

二、Proxmox VE 安装

用户可以直接在现有的 Debian 上安装 PVE 相关的软件包,将之改造成 PVE 节点,但更推荐的方法是直接用官方提供的 ISO 文件,完成全系统的安装。安装过程中除了问装到哪儿之类的常规问题,没有别的复杂情况。安装完之后会重启,重启完成后即可使用 SSH 登录,或是用 https://<ipaddress>:8006/ 访问网页管理页面(注意是 https://),这一地址也会打印在屏幕上(如果你忘了的话)。
网页或是命令行管理真是方便啊,再也不用在 Windows 虚拟机里运行 Citrix XenCenter 或是 VMWare vSphere Client 了。

三、Proxmox VE 配置

存储

默认安装下,安装程序会将目标硬盘分出一个专供存储 VM 镜像的 LVM Thin Pool,与系统分区一起放在名为 pve 的 LVM Volume Group 里——相比 XenServer 和 ESXi 需要额外配置诡异、专有的 SR / Datastore,直接使用 LVM 实在是太方便了。
当然,PVE 也支持 NFS, iSCSI, Ceph, GlusterFS, ZFS 等其他 VM 存储。对于小规模使用来说,本地 LVM 存储已经足够好用了,高效、透明、稳定。当你的 VM 出现问题的时候(比如 GRUB 或 initramfs 坏了),你可以直接在宿主机上用 losetup 和 mount 挂载其分区,然后 chroot 进去修。对于中型及以上规模的集群使用场景的话,网络存储将会是个更好的选择。
在 VM 需要直接使用宿主机磁盘的场景下(比如后来我把我的 Gen8 也换成 PVE 了),PVE 也可以很方便地做直通

网络

网络方面,PVE 支持桥接和路由两种方式,默认是桥接。这个桥接就是标准的 Linux Bridge(路由也是标准的 iptables),甚至配置就是直接写在 Debian 的网络配置文件 /etc/network/interfaces 里的,你可以直接编辑它添加更多的网桥,或是修改已有的网桥。更推荐的方式是使用其网页管理界面进行管理,以避免语法错误。在网页管理界面进行修改后,PVE 会将新的配置写在 /etc/network/interfaces.new 里,并给出一个 diff,供再次检查。确认无误后,重启机器,即可让新的配置替换掉旧的配置。这一点可以说是非常贴心了(回想起了早年远程改一台没有 LOM 的服务器网络配置导致其断网,最后不得不派小伙伴人肉前往机房的惨痛经历)。

集群

多台 PVE 节点可以组成一个集群(cluster)。PVE 实现的集群的方式也有意思:把配置目录 /etc/pve 用 FUSE 挂载,通过 Corosync 跨机器同步,任何对配置文件的修改都会实时出现在节点中的任何一台机器上,从而实现集群之间的配置文件同步。

四、创建及启动 VM

cloud-init 支持

我为什么要从 XenServer 换到 Proxmox VE?最主要的原因是为了能用 cloud-init。「如何得知新启动的 VM 的 IP 地址」一直是个困扰 VM 使用者的问题。大厂(公有云)和小作坊(自建)的解决方法从 random shell script 到 DHCP hook 各不相同。之前 XenServer 里一直用的方法手搓镜像,往里面加塞 random shell script,这实在太不优雅了。总算随着以 AWS EC2 为首各种「云」的广泛普及,cloud-init 逐渐成为这一问题的标准答案,而各大发行版们也纷纷推出自带 cloud-init 的预制镜像(例:CentOSUbuntuDebian)。这些镜像可以在支持 cloud-init 的 hypervisor 环境里直接启动,并自动从外部数据源获取 IP 地址、SSH 公钥,甚至是 random shell script 等信息,彻底将 DevOps 从手搓 VM 镜像的痛苦过程中解放出来。
Proxmox VE 是支持 cloud-init 的,用的是 NoCloud 数据源。用户将发行版的预制 Cloud Image 导入为 PVE 之后,设置为模板,之后的就可以从这个模板克隆出新的 VM。配置好新 VM 的主机名、IP 地址、SSH 公钥等信息,PVE 会生成一个 8 MiB 大小的 ISO 镜像,以虚拟光驱形式挂载在 VM 上,VM 启动后,内置 cloud-init 会根据虚拟光驱里的 cloud-init 信息自己配置自己。关于导入 Cloud Image 的详细步骤,请参阅 Proxmox VE Wiki
目前 PVE 的 cloud-init 支持会强制启用 package_ugprade: true 选项,导致 cloud-init 启动时一定会做一次全系统升级。如果不需要这个行为,可以修改 /usr/share/perl5/PVE/QemuServer/Cloudinit.pm 文件注释掉相关设置,并重启 pvedaemon.service。这个选项在下个版本的 PVE 中有望变成可配置的,详见 Proxmox Bugzilla

Ansible 支持

Ansible 模块 proxmox_kvm 可以用来管理 PVE 里虚拟机。然而我觉得这个模块并不好用。在可以直接登录 PVE 机器的情况下,直接用命令行创建也是个不错的选择。以下是我写的 Ansible Playbook 的部分片段,仅供参考:
- name: Get a list of existing VMs
  command: pvesh get /cluster/resources -type vm --output-format json
  register: pvesh_vms
  changed_when: False

- set_fact:
    pve_vm_names: "{{ pvesh_vms.stdout | from_json | json_query('[*].name') | sort }}"

- debug:
    var: pve_vm_names

- name: Check if VM already exists
  assert:
    that:
      - pve_hostname_fqdn not in pve_vm_names

- name: Get next VMID
  command: pvesh get /cluster/nextid
  register: pvesh_nextid
  changed_when: False

- set_fact:
    pve_vmid: "{{ pvesh_nextid.stdout }}"

- name: Clone a new PVE instance
  command: "qm clone {{ pve_template_id }} {{ pve_vmid }} --name {{ pve_hostname_fqdn }}"

- name: Configure the new instance
  command: "qm set {{ pve_vmid }} --cores {{ pve_vcpus }} --memory {{ pve_memory }} --ipconfig0 gw={{ pve_gw }},ip={{ pve_ip }} --sshkey {{ pve_sshkey_path }}"

- name: Start the new instance
  command: "qm start {{ pve_vmid }}"

五、迁移到 Proxmox VE

从别的虚拟化方案(XenServer, ESXi 等)迁移到 PVE 也不难。总体思路就是获取到虚拟磁盘(需要是 qemu-img 支持的格式,如 raw, vhd, qcow2, vmdk 等),然后像上文导入 Cloud Image 那样导入 PVE 即可。由于半虚拟化驱动的不同,部分情况下 VM 可能会无法启动(找不到磁盘),为了避免不必要的麻烦,建议在迁移前先在旧系统里将 initramfs 的生成配置改为 generic / fallback 或其他类似设置,使其包含所有的存储驱动,以便在各种虚拟化方案里都能成功启动。