为Xen创建虚拟LAN
在Debian Squeeze上安装xen一文中,我们讨论了在局域网内部创建xen的方法,dom0和每个domU都使用相同的网段地址和网关,这种配置简单,但仅适用于局域网,因为IP数量够用,而且可以随意分配。
不过,在公网上,通常只有1个公网IP地址,domU只能分配私有IP地址,因此需要如下功能才能让domU正常服务:
- 各个domU之间能互相通信;
- domU能通过dom0作为网关访问Internet;
- dom0通过NAT将某些domU的服务暴露到Internet上。
为此,首先需要为domU创建一个虚拟的局域网,例如网段设置为172.16.16.0,dom0拥有两个网络接口:
- eth0:公网IP;
- dummy0:虚拟网络接口,作为内部网络的网关,地址为172.16.16.1
因此,首先为dom0创建虚拟的网络接口:
# modprobe dummy
向/etc/modules追加一行:
# echo dummy >> /etc/modules
编辑/etc/network/interfaces,增加dummy0的配置:
auto dummy0
iface dummy0 inet static
address 172.16.16.1
netmask 255.255.255.0
broadcast 172.16.16.255
启动dummy0:
# ifup dummy0
启用IP Forward:
# sysctl -w net.ipv4.ip_forward=1
编辑/etc/sysctl.conf使之永久生效:
net.ipv4.ip_forward=1
然后,需要让xend为两块网卡创建bridge,需要修改/etc/xen/xend-config.sxp,将:
(network-script 'network-bridge')
改为:
(network-script 'my_network_script')
my_network_script是我们自己的脚本,创建/etc/xen/scripts/my_network_script内容如下:
#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"$dir/network-bridge" "$@" vifnum=1 netdev=dummy0 bridge=xenbr1
将my_network_script加上执行权限:
# chmod a+x /etc/xen/scripts/my_network_script
重启服务器,可以用ifconfig看到xend创建的4个网络接口:
- lo:本机地址,127.0.0.1;
- pdummy0;
- peth0;
- xenbr0:公网IP地址;
- xenbr1:私有网关地址,172.16.16.1。
然后正常安装domU。
启动domU之前,需要修改domU的配置,例如/etc/xen/my-domU-1.cfg:
将:
vif = [ 'ip=172.16.16.60,mac=00:16:3E:F4:E7:0B' ]
改为:
vif = [ 'ip=172.16.16.60,bridge=xenbr1,mac=00:16:3E:F4:E7:0B' ]
其实就是加上bridge=xenbr1,因为domU用的是内网地址,应该使用xend提供的xenbr1做桥接。
启动domU后,分别ping内网地址(其他domU的地址)、网关172.16.16.1和dom0的公网地址,发现均能ping通,但无法ping通其他任何公网地址,例如www.sina.com.cn,说明网络数据包确实到达了dom0的172.16.16.1,但还缺少一条NAT规则以便把dummy0的包转发到eth0上。在dom0上添加iptables规则:
# iptables -t nat -A POSTROUTING -o xenbr0 -j MASQUERADE
然后在domU中再次ping外网地址,例如www.sina.com.cn,终于返回结果,wget测试也正常。
如果要将某些domU的服务映射到公网上,例如,一个地址为172.16.16.70的domU提供了8080端口的http服务,现在想在公网IP的80端口上访问它,则添加iptables规则:
# iptables -t nat -A PREROUTING -i xenbr0 -p tcp --dport 80 -j DNAT --to 172.16.16.70:8080
在外网测试访问http://公网IP/则映射到http://172.16.16.70:8080/。
参考:
相关文章
- 浅谈API网关(API Gateway)如何承载API经济生态链
- 重磅解读:K8s Cluster Autoscaler模块及对应华为云插件Deep Dive
- 这可能是关于编程指南的最实用指南了
- 低代码开发不靠谱?看低代码开发在物联网APP开发中的应用
- 华为发布5GtoB核心网建设白皮书
- 快快使用ModelArts,零基础小白也能玩转AI!
- 聆听无声的话语:手把手教你用ModelArts实现手语识别
- 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术
- 小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
- 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
- 华为云FusionInsight MRS:助力企业构建“一企一湖,一城一湖”
- 华为云专家私房课:视频传输技术选型的三大法宝
- 为什么11·11物流一年比一年快?奥秘就在这里!
- 华为云“创原会”:40+技术精英论道云原生2.0
- 容器、Docker、虚拟机,别再傻傻分不清
- 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义
- 云图说|知道吗?在和你对话的那头,也许是个机器人哦~
- 专利申请其实并不难?四步教你玩转专利申请!
- 玩转华为云开发|老板万万没想到:刚入职的我一人就搞定人脸识别开发
- 人少钱少需求多的新项目该怎么带?看到这篇我心里有底了!