场景:qemu虚拟机通过tap设备与host的物理网卡通过bridge桥接上网。

如下:

[root@host100 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001700010000 yes eth0
tap200-

虚拟机里有一个client外连一个指定的tcp端口获取服务,因为它是不可配置的,所以它默认链接 169.254.169.254的1600端口。

配置根据不同的部署情况在host主机上做,方法是用DNAT,置换掉169.254.169.254:1600为指定的ip和端口。

通常情况下nat的配置这样写:

iptables -t nat -A PREROUTING -p tcp -d 169.254.169.254 -m tcp --dport  -j DNAT --to-destination 192.168.7.129:

但是,并不好使。因为bridge的情况比较特殊(但是我并不知道为啥特殊。。。。)

所以,需要这样写:

iptables -t nat -A PREROUTING -p tcp -d 169.254.169.254 -m tcp --dport  -m physdev --physdev-in tap200- -j DNAT --to-destination 192.168.7.129:

当时即使这样,依然也不一定好使。因为还需要另一个重要的配置:

echo  > /proc/sys/net/ipv4/ip_forward

至于这个配置的深层定义,我还没有理解。待续~~~

参考:http://bwachter.lart.info/linux/bridges.html

05-11 04:46