DNS z OpenVPN na serwerze Linux z włączonym routingiem

0

Używam Ubuntu 14.04.1 LTSbezgłowego serwera. Zanim włączyłem routing, mój AirPort Extreme był routerem. W tym momencie DNS nie był problemem. Odkąd przestałem używać AirPort Extreme, a Ubuntu 14.04.1 LTSbezgłowy serwer stał się routerem, DNS nie działał, gdy OpenVPN jest podłączony. Powtórzę więc, że problem polega na tym ping 173.194.219.139, że działa, ale ping google.comnie działa.

Oto odpowiednie pliki konfiguracyjne:

/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Bridge setup
auto br0 em1
iface br0 inet dhcp
bridge_ports em1

auto br1 em2 veth0
iface br1 inet static
address 10.0.0.1
network 10.0.0.0
netmask 255.255.255.0
broadcast 10.0.0.255
bridge_ports em2 veth0

# pre and post up
pre-up ip link add name veth0 type veth peer name veth1
pre-up ip netns add vpn
pre-up ip link set veth1 netns vpn
post-up ip netns exec vpn ip link set dev lo up
post-up ip netns exec vpn ip link set dev veth1 up
post-up ip netns exec vpn ip addr add 10.0.0.254/24 broadcast 10.0.0.255 dev veth1
post-up ip netns exec vpn ip route add default via 10.0.0.1


iptables

*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# ALLOW COMMUNICATION WITH NETNS VPN
-A FORWARD -o "$INTIF" -j ACCEPT
# ALLOW STATES RELATED,ESTABLISHED
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# LOOPBACK
-A INPUT -i lo -j ACCEPT
# ICMP
-A INPUT -i "$INTIF" -p icmp -j ACCEPT
# DNS
-A INPUT -i "$INTIF" -p tcp --dport 53 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 53 -j ACCEPT
# DHCP
-A INPUT -i "$INTIF" -p udp --dport 67 -j ACCEPT
# PLEX
-A INPUT -p tcp --dport 32400 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 1900 -j ACCEPT
-A INPUT -i "$INTIF" -p tcp --dport 3005 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 5353 -j ACCEPT
-A INPUT -i "$INTIF" -p tcp --dport 8324 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 32410 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 32412 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 32413 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 32414 -j ACCEPT
-A INPUT -i "$INTIF" -p tcp --dport 32469 -j ACCEPT
# SSH
-A INPUT -i "$INTIF" -p tcp --dport 22 -j ACCEPT
# TRANSMISSION
-A INPUT -p tcp --dport 59156 -j ACCEPT
-A INPUT -i "$INTIF" -p tcp --dport 9091 -j ACCEPT
# HTTP(S)
-A INPUT -i "$INTIF" -p tcp --dport 80 -j ACCEPT
# SAMBA
-A INPUT -i "$INTIF" -p tcp --dport 139 -j ACCEPT
-A INPUT -i "$INTIF" -p tcp --dport 445 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 137 -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 138 -j ACCEPT
# FACETIME & IMESSAGE
-A INPUT -p tcp --dport 80 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p udp --dport 3478 -j ACCEPT
-A INPUT -p udp --dport 3497 -j ACCEPT
-A INPUT -p tcp --dport 5223 -j ACCEPT
-A INPUT -p udp --dport 16384 -j ACCEPT
-A INPUT -p udp --dport 16387 -j ACCEPT
-A INPUT -p udp --dport 16393 -j ACCEPT
-A INPUT -p udp --dport 16402 -j ACCEPT
# ROUTING
-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -j ACCEPT
-A FORWARD -j LOG
COMMIT


/etc/openvpn/US-California.conf

client
dev tun
proto udp
remote us-california.privateinternetaccess.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass login
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
David Custer
źródło

Odpowiedzi:

1

Rozpoznawanie DNS nie działa, ponieważ zapomniałeś dodać poprawny plik /etc/resolv.conf do przestrzeni nazw sieci. Istnieją dwie osobliwości tego.

Po pierwsze, to odbywa się na zewnątrz z iproute2 poleceń.

        mkdir -p /etc/netns/nns
        echo "nameserver 8.8.8.8" > /etc/netns/nns/resolv.conf
        echo "nameserver 8.8.4.4" >> /etc/netns/nns/resolv.conf

Zmień nns za pomocą nazwy przestrzeni nazw sieci.

Po drugie, należy to zrobić przed utworzeniem przestrzeni nazw sieci, w którym to przypadku pojawi się zupełnie nowy plik /etc/resolv.conf, który jest całkowicie niezwiązany z hostami i którym można manipulować dokładnie w ten sam sposób jako hosta, pozostawiając kopię hosta nietkniętą.

Możesz łatwo dodać powyższe polecenia do sekcji wstępnej swojej sekcji br1 w / etc / network / interfaces, a także do poleceń usuwających plik do sekcji post-down.

Łatwo jest również zrozumieć, dlaczego DNS nie działa w twoim systemie: używasz Ubuntu, który dla DNS używa dnsmasq działającego w lointerfejsie, pod adresem 127.0.1.1 (wystarczy spojrzeć na /etc/resolv.conf), aby twój Żądania DNS trafiają do interfejsu lo, są przechwytywane przez instancję dnsmasq, która bierze na siebie rozwiązywanie zapytań DNS. Ponieważ nie zmieniłeś /etc/resolv.conf, nadal używasz hosta, który odnosi się do lo: ale low przestrzeni nazw sieci vpnnie ma instancji dnsmasq nasłuchującej zapytań DNS.

MariusMatutiae
źródło
0

Wygląda na to, że twój /etc/openvpn/server.conf push "dhcp-option DNS"wskazuje na AirPort Extreme. Spróbuj zaktualizować to ustawienie i ponownie sprawdź VPN.

Tim
źródło