![在 netns 中进行绑定以侦听 localhost](https://linux22.com/image/79709/%E5%9C%A8%20netns%20%E4%B8%AD%E8%BF%9B%E8%A1%8C%E7%BB%91%E5%AE%9A%E4%BB%A5%E4%BE%A6%E5%90%AC%20localhost.png)
我有一个运行 Bind 的 Debian Jessie。已设置 OpenVPN 连接。并resolv.conf
首先设置为使用本地绑定:
nameserver 127.0.0.1
nameserver 4.2.2.4
我想以这样的方式设置系统肯定程序访问互联网仅有的通过该 VPN 连接(在没有该连接的情况下,它不能在任何地方进行任何访问),其余的则直接访问互联网。我想全部程序使用本地绑定来解析域名并将其4.2.2.4
从resolv.conf
.
我认为网络命名空间是适合工作的工具:我将 VPN 接口移至网络命名空间(因此它是除环回之外唯一可用的连接),然后运行这些肯定我的网络命名空间中的程序。我制作了以下脚本,并将其设置为作为 OpenVPNroute-up
脚本运行:
NS=zzz
if [ ! -f /var/run/netns/$NS ]; then
/sbin/ip netns add $NS
fi
/sbin/ip link set $dev netns $NS
/sbin/ip netns exec $NS /sbin/ifconfig lo up
/sbin/ip netns exec $NS /sbin/ifconfig $dev $ifconfig_local pointopoint $ifconfig_remote up
/sbin/ip netns exec $NS /sbin/route add default gw $ifconfig_remote metric 1024
对我来说效果很好,除了 Bind 不侦听我的网络命名空间中的环回接口,因此所有名称解析请求都会发送到外部 DNS。我该如何解决这个问题?我可以以某种方式指定两个环回(常规环回和 netns 环回)是相同的吗?或者我应该在我的命名空间中运行另一个 Bind 副本?还有别的事吗?