在启用路由的 Linux 服务器上使用 OpenVPN 进行 DNS

在启用路由的 Linux 服务器上使用 OpenVPN 进行 DNS

我正在运行Ubuntu 14.04.1 LTS无头服务器。在启用路由之前,我的AirPort Extreme是路由器。那时,DNS 不是问题。自从我停止使用 AirPort Extreme,Ubuntu 14.04.1 LTS无头服务器成为路由器后,当 OpenVPN 连接时,DNS 就不起作用了。所以重申一下,问题是它能ping 173.194.219.139用,但ping google.com不能用。

以下是相关配置文件:

/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

答案1

DNS 解析不起作用,因为您忘记将正确的 /etc/resolv.conf 添加到网络命名空间。这有两个特点。

首先,这是完成的外部iproute2命令。

        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

将 nns 更改为您的网络命名空间的名称。

其次,需要这样做您创建网络命名空间,在这种情况下,命名空间中将出现一个全新的 /etc/resolv.conf,它与主机完全无关,并且可以以与主机完全相同的方式进行操作,同时保持主机的副本不受影响。

您可以轻松地将上述命令添加到 /etc/network/interfaces 中 br1 节的 pre-up 部分,同样,将文件删除的命令添加到 post-down 部分。

还很容易看出 DNS 在您的系统上无法工作的原因:您使用的是 Ubuntu,对于 DNS,它使用在lo地址 127.0.1.1 的接口上运行的 dnsmasq(只需查看 /etc/resolv.conf),这样您的 DNS 请求就会转到 lo 接口,并被您的 dnsmasq 实例拦截,后者会自行解析 DNS 查询。由于您没有更改 /etc/resolv.conf,因此您仍在使用主机的 dnsmasq,它引用lo:但lo在网络命名空间中vpn,没有 dnsmasq 实例在监听 DNS 查询。

答案2

听起来您的 /etc/openvpn/server.conf 已push "dhcp-option DNS"指向 AirPort Extreme。请尝试更新该设置并再次检查您的 VPN。

相关内容