Мне нужно привязать одну программу к интерфейсу wlan1
, все остальные программы по умолчанию должны использовать wlan0
.
По этой причине я настроил выделенное пространство имен сети:
ip netns add wlan1_ns
ip link add vwlan1a type veth peer name vwlan1b
ip link set vwlan1a netns wlan1_ns
ip addr add 10.200.1.1/24 dev vwlan1b
ip link set vwlan1b up
ip netns exec wlan1_ns ip addr add 10.200.1.2/24 dev vwlan1a
ip netns exec wlan1_ns ip link set vwlan1a up
ip netns exec wlan1_ns ip link set lo up
ip netns exec wlan1_ns ip route add default via 10.200.1.1
iptables -t nat -A POSTROUTING -s 10.200.1.0/255.255.255.0 -o wlan1 -j MASQUERADE
iptables -A FORWARD -i wlan1 -o vwlan1b -j ACCEPT
iptables -A FORWARD -o wlan1 -i vwlan1b -j ACCEPT
После этого я ожидаю, что разрешение доменных имен будет работать в моем новом пространстве имен, но, очевидно, это не так, почему ?:
$ sudo ip netns exec wlan1_ns ping -v google.com
ping: socket: Permission denied, attempting raw socket...
ping: socket: Permission denied, attempting raw socket...
ping: google.com: Temporary failure in name resolution
... в то время как разрешение корневого пространства имен работает нормально (wlan1
не подключен к Интернету, поэтому потеря пакетов, но не беспокойтесь об этом):
# ping google.com
PING google.com (216.58.212.238) 56(84) bytes of data.
^C
--- google.com ping statistics ---
122 packets transmitted, 0 received, 100% packet loss, time 125718ms
Когда я использую ping/curl с IP вместо доменного имени, запросы правильно отправляются. У меня закончились идеи, почему разрешение не работает. Я делаю это в RaspberryPi 3, Raspbian, ядро 4.9. Пожалуйста, найдите ниже то, что я уже исследовал.
Файл nsswitch.conf:
$ cat /etc/nsswitch.conf | grep host
hosts: files mdns4_minimal [NOTFOUND=return] dns
Ответ resolvconf для корневого пространства имен:
$ resolvconf -l
# resolv.conf from lo.dnsmasq
nameserver 127.0.0.1
# resolv.conf from wlan1
# resolv.conf for wlan1
domain coova.org
nameserver <<ANONYMIZED DNS IP>>
nameserver <<ANONYMIZED DNS IP>>
resolvconf в моем пространстве имен:
$ ip netns exec wlan1_ns resolvconf -l
# resolv.conf from lo.dnsmasq
nameserver 127.0.0.1
# resolv.conf from wlan1
# resolv.conf for wlan1
domain coova.org
nameserver <<ANONYMIZED DNS IP>>
nameserver <<ANONYMIZED DNS IP>>
iptables в корневом пространстве имен
$ sudo iptables -v --list
Chain INPUT (policy ACCEPT 641 packets, 63289 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 171 packets, 90385 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- wlan1 vwlan1b anywhere anywhere
32 1816 ACCEPT all -- vwlan1b wlan1 anywhere anywhere
Chain OUTPUT (policy ACCEPT 802 packets, 91050 bytes)
pkts bytes target prot opt in out source destination
iptables в моем пространстве имен:
$ sudo ip netns exec wlan1_ns iptables -v --list
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
РЕДАКТИРОВАТЬ - пробное решение, предложенное в ответе ниже, без результата
Настроил resolvconf, чтобы он указывал на достижимый IP-адрес dnsmasq:
pi@raspberrypi:~ $ sudo sh -c "echo nameserver 172.24.1.1 | resolvconf -a lo.dnsmasq"
Too few arguments.
Too few arguments.
pi@raspberrypi:~ $ resolvconf -l
# resolv.conf from lo.dnsmasq
nameserver 172.24.1.1
# resolv.conf from wlan1
# resolv.conf for wlan1
domain coova.org
nameserver <<ANONYMIZED _IP>>
nameserver <<ANONYMIZED _IP>>
Чтобы доказать, что IP доступен, dig
правильно, решает доменное имя:
pi@raspberrypi:~ $ sudo sh -c "ip netns exec wlan1_ns dig +short @172.24.1.1 google.com"
172.217.17.142
... пока ping
прежнему имеет проблемы:
pi@raspberrypi:~ $ sudo sh -c "ip netns exec wlan1_ns ping -v google.com"
ping: socket: Permission denied, attempting raw socket...
ping: socket: Permission denied, attempting raw socket...
ping: google.com: Temporary failure in name resolution