Pro*_*ter 5 networking xen network-bridge
我一直在阅读有关如何为 xen 设置网络的各种页面。不幸的是,它们实际上都没有完整的示例配置。它们清楚地显示了 xenbr0 部分应该是什么样子,但没有在提到之后您应该如何更改 eth0:
笔记!桥接设备的IP配置应该替换底层接口的IP配置,即把eth0的IP设置去掉,移到桥接接口上。eth0 将纯粹用作网桥的物理上行链路,因此它不能有任何 IP (L3) 设置!
我试过很多配置都失败了(运行 /etc/init.d/networking restart 后,没有正常的网络访问,不能 ssh 进出)。
这是我当前的配置:
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet static
bridge_ports eth0
address 10.0.0.3
netmask 255.0.0.0
broadcast 10.255.255.255
gateway 10.0.0.1
auto eth0
iface eth0 inet manual
Run Code Online (Sandbox Code Playgroud)
也许这是正确的,我只需要设置一些 iptables 转发规则?我尝试运行该命令,sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
但收到一条错误消息,指出 --physdev-is-bridged 不是可识别的选项。
重新启动网络的调试输出提供以下输出:
Reconfiguring network interfaces...
Waiting for xenbr0 to get ready (MAXWAIT is 32 seconds).
RTNETLINK answers: No such process
Failed to bring up xenbr0
ssh stop/waiting
ssh start/running, process 3775
Run Code Online (Sandbox Code Playgroud)
我已经检查过 xenbr0 已经存在,因为当我尝试使用该名称创建桥时,brctl 告诉我它无法创建,因为它已经存在。
最后,我最终只是创建了一个接口并使用一些 iptables 规则在其上转发数据包,这似乎对我有用。这并没有使用所有教程似乎都建议的“桥接”选项,所以我不知道是否存在致命缺陷?
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet static
bridge_ports none
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 10.0.0.3
# The primary network interface
auto eth0
iface eth0 inet static
address 10.0.0.3
netmask 255.0.0.0
network 10.0.0.0
broadcast 10.255.255.255
gateway 10.0.0.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
Run Code Online (Sandbox Code Playgroud)
您需要编辑 /etc/sysctl.conf 并取消注释以下行:
net.ipv4.ip_forward=1
Run Code Online (Sandbox Code Playgroud)
然后您需要创建一个脚本来编辑 iptables 以转发数据包:
sudo /sbin/iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
sudo /sbin/iptables --append FORWARD --in-interface xenbr0 -j ACCEPT
return 0
Run Code Online (Sandbox Code Playgroud)
然后你需要确保该脚本是由 rc.local 文件调用的:
sudo vi /etc/rc.local
Run Code Online (Sandbox Code Playgroud)
添加以下行:
/bin/sh <path-to-script-you-just-created-here>
Run Code Online (Sandbox Code Playgroud)
然后重启使所有设置生效。
您可能会注意到,我将其设置为虚拟机使用 192.168.2.x 地址子网,而外部 LAN 位于 10.xxx,这可能与大多数人想要的不同,因此您必须将这些编辑为您自己的个人需求。
后来更新
我意识到缺乏桥接意味着我无法从网络外部访问我的虚拟机(即我无法从家里直接 ssh 进入它们,或者运行它们的网站等)
使用像这样的网络配置:
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet static
address 23.29.115.142
netmask 255.255.255.248
network 23.29.115.136
broadcast 23.29.115.143
gateway 23.29.115.137
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Run Code Online (Sandbox Code Playgroud)
我猜那些额外的桥接选项使它起作用,或者可能是文件中列出接口的顺序(这次是在桥接器之前的 eth0)
归档时间: |
|
查看次数: |
19911 次 |
最近记录: |