Я использую компьютер Linux (Raspberry Pi) для разделения VPN-подключения через Ethernet. Я хочу, чтобы Raspberry Pi нормально подключался к Интернету (не через VPN). Я очень близок к тому, чтобы заставить его работать, но я не знаю, как настроить DNS для сети eth1.
Connection to the internet: eth0 192.168.11.21/24, gateway 192.168.11.1
vpn connection: tun0 <- openvpn connection
vpn sharing network: eth1 192.168.5.1/24 <- this maching is the gatway for the vpn sharing network
eth1 config:
eth1: /etc/network/interface
auto eth1
iface eth1 inet static
address 192.168.5.1
netmask 255.255.255.0
У меня dnsmasq работает как dhcp сервер для eth1 (виртуальная сеть vpn)
# Configuration file for dnsmasq.
#
interface=eth1
dhcp-range=192.168.5.50,192.168.5.150,12h
vpn config
Я только хочу, чтобы трафик из eth1 использовал vpn. Я сам настраиваю маршруты, используя отдельную таблицу маршрутизации.
# extract from openvpn config
route-noexec
route-up "/etc/openvpn/route-up.sh"
down "/etc/openvpn/down.sh"
# route-up.sh
/sbin/ip route add $trusted_ip/32 via $route_net_gateway table vpn
/sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
/sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn
Мне также нужно было выполнить несколько команд для настройки отдельной таблицы маршрутизации:
# make a new routing table called vpn
echo 200 vpn >> /etc/iproute2/rt_tables
# add a rule to use the routing table for the addresses on eth1
ip rule add from 192.168.5.0/24 table vpn
Связывание интерфейсов:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Тестирование:
Я поставил ноутбук с Windows в сеть совместного использования VPN. Он может общаться по интернет-адресам напрямую. Но с использованием доменных имен поиск DNS не удается. Я не нашел рабочий способ настроить DNS.
Я пытался добавить это в dnsmasq
server=<dns-server-address>
Я также попытался добавить эту строку под eth1 в /etc /network /interfaces
dns-nameservers <dns-server-address>
Это заставило resolvconf -l вернуть это:
# resolv.conf from eth1.inet
# Generated by ifup for eth1.inet
nameserver <dns-server-address1>
nameserver <dns-server-address2>
но /etc/resolv.conf сохраняет то же самое:
# Generated by resolvconf
nameserver 127.0.0.1
Я даже пытался редактировать /etc/resolv.conf напрямую. - Но он автоматически обновляется и почти сразу перезаписывается.
--редактировать --
Моя цель состоит в том, чтобы иметь установку, которая не требует какой-либо конкретной конфигурации на клиенте в сети совместного использования vpn. (Я буду подключать устройства, которые не могут быть настроены)
Я также хотел бы отправлять DNS-запросы через VPN, если это возможно.
--edit 2--
Первый. Я перешел на тестирование с клиентом Linux. Модификация resolv.conf для добавления моего DNS-сервера заставляет работать интернет-соединение vpn'd.
Тем не менее - похоже, решение 5 для меня. Это перехватывает пакеты DNS и изменяет их, чтобы направить их на новый сервер DNS?
Я не мог заставить это работать на меня. Я выложу свою конфигурацию здесь. Я что-то пропустил?
# iptables-save
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*mangle
:PREROUTING ACCEPT [51:3878]
:INPUT ACCEPT [49:3758]
:FORWARD ACCEPT [2:120]
:OUTPUT ACCEPT [30:3438]
:POSTROUTING ACCEPT [32:3558]
-A PREROUTING -p tcp -m tcp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -p udp -m udp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*nat
:PREROUTING ACCEPT [4:337]
:INPUT ACCEPT [3:277]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.1
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.2
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*filter
:INPUT ACCEPT [41189:45918808]
:FORWARD ACCEPT [63803:44422296]
:OUTPUT ACCEPT [33919:5341216]
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# ip route list table vpn
0.0.0.0/1 via 172.21.24.1 dev tun0
81.171.74.16 via 192.168.11.1 dev eth0
128.0.0.0/1 via 172.21.24.1 dev tun0
# ip route list table main
default via 192.168.11.1 dev eth0
default via 192.168.11.1 dev eth0 metric 202
172.21.24.0/23 dev tun0 proto kernel scope link src 172.21.24.57
192.168.5.0/24 dev eth1 proto kernel scope link src 192.168.5.1
192.168.11.0/24 dev eth0 proto kernel scope link src 192.168.11.21
192.168.11.0/24 dev eth0 proto kernel scope link src 192.168.11.21 metric 202
# ip rule
0: from all lookup local
32764: from all fwmark 0x1 lookup vpn
32765: from 192.168.5.0/24 lookup vpn
32766: from all lookup main
32767: from all lookup default
# cat /etc/resolv.conf
# Generated by resolvconf
nameserver 127.0.0.1
# On the client
# cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.5.1
- редактировать 3 -
# tcpdump -i tun0 -n port 53
23:44:29.787915 IP 192.168.5.1.53 > 192.168.5.128.38840: 36460 4/0/0 A 157.7.203.102, A 157.7.154.23, A 116.58.172.182, A 157.7.235.92 (101)
23:44:29.788071 IP 192.168.5.1.53 > 192.168.5.128.38840: 37999 0/0/0 (37)
23:44:30.619149 IP 192.168.5.1.53 > 192.168.5.128.58425: 3383 1/0/0 A 129.169.10.40 (47)
23:44:30.620635 IP 192.168.5.1.53 > 192.168.5.128.58425: 11649 0/1/0 (83)
Глядя на это, мы получаем ответы DNS, которые возвращаются к клиенту (192.168.5.128). Правильно? Теперь мне нужно выяснить, как это исправить ...