这里说的 nat 网络是指类似于 docker 服务创建的 docker0 接口,lxc-net 服务创建的 lxcbr0 接口,virtnetworkd 服务创建的 virbr0 接口,这些本质都是用来给虚拟机或容器用的网桥,默认情况下虚拟机或容器会使用系统的默认路由来连接互联网,但是我的系统的默认路由是走主路由的,主路由没有科学上网功能,我想让虚拟机或容器走带有科学上网功能的旁路由,有什么办法实现吗?
比如我的本机的 ip 是 192.168.1.2 ,主路由的 ip 是 192.168.1.1 ,科学上网旁路由的 ip 是 192.168.1.253 ,我可以用下面几条命令创建一个 nat 网络:
BRIDGE=nat-br
NETWORK=192.168.53.0
NETMASK=255.255.255.0
GATEWAY=192.168.53.1
DHCPRANGE=192.168.53.2,192.168.53.254
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ ! -e /sys/class/net/$BRIDGE/bridge ] ; then
ip link add name $BRIDGE type bridge
ip addr add $GATEWAY/$NETMASK dev $BRIDGE
ip link set $BRIDGE up
iptables -t nat -I POSTROUTING -s $NETWORK/$NETMASK -j MASQUERADE
iptables -t nat -A PREROUTING -p udp -i $BRIDGE --dport 53 -j DNAT --to-destination 192.168.1.253:53
dnsmasq --interface=$BRIDGE --strict-order --except-interface=lo --listen-address=$GATEWAY --bind-interfaces --dhcp-range=$DHCPRANGE --dhcp-no-override
fi
如果系统的默认路由现在是 192.168.1.253 ,那么使用 nat-br 这个网桥的虚拟机或容器是能直接访问谷歌的,但我不想把系统的默认路由设置成 192.168.1.253 ,想保持为 192.168.1.1 ,同时又能达到让虚拟机或容器科学上网的效果
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.