在 netns 中进行绑定以侦听 localhost

在 netns 中进行绑定以侦听 localhost

我有一个运行 Bind 的 Debian Jessie。已设置 OpenVPN 连接。并resolv.conf首先设置为使用本地绑定:

nameserver 127.0.0.1
nameserver 4.2.2.4

我想以这样的方式设置系统肯定程序访问互联网仅有的通过该 VPN 连接(在没有该连接的情况下,它不能在任何地方进行任何访问),其余的则直接访问互联网。我想全部程序使用本地绑定来解析域名并将其4.2.2.4resolv.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 副本?还有别的事吗?

相关内容