OpenVPN 服务器将 DNS 和流量转发到私有 + WWAN

OpenVPN 服务器将 DNS 和流量转发到私有 + WWAN

目的:OpenVPN 服务器允许客户端在 WWAN 上伪装成其公共 IPv4,以及连接到私有网络内的其他本地服务器,例如内部 DNS 服务器。

OpenVPN 服务器将所有流量路由到专用网络和 WAN

包含 VPN 服务器 + DNS 服务器的私有网络地址为 10.0.0.0/16。DNS 服务器为 10.0.0.2。

从该图可以看出,OpenVPN 客户端连接正常,能够看到 WAN。但是,存在一些问题:

  1. nslookup即使我手动指定 DNS 服务器的私有 IP,也无法执行此操作。我还尝试使用 VPN 服务器的公共 IP 和私有 IP,但nslookup无济于事。

  2. 我无法 ping/http/ssh 到私有子网上的任何服务器除了我知道我正在通过 VPN 连接。我能够通过 SSH 连接到 OpenVPN 服务器的私有 IP 地址。

注意:对于 SSH,我实际上并不介意 ^ 我必须首先通过 VPN 服务器进行 SSH 前向代理才能到达端口 22 上的其他私有设备。但即使我选择这样做,我相信我有责任准确了解它是如何被允许/拒绝的!

  1. 尽管我已经在 OpenVPN 服务器配置中指定了 DNS 服务器,并且这些参数在 OpenVPN 启动序列中得到了回显,所以我知道服务器正在以某种方式将它们指定给客户端-当 VPN 连接时,本地计算机上的默认 DNS 服务就会关闭。我有很多理论,但在进一步探讨这个问题之前,先解决第 1 项似乎是明智的做法 (??)

  2. 在 OpenVPN 启动过程中,我看到了类似的错误,Unrecognized option or missing parameter但我相信这些错误一定是 OpenVPNas 服务器指定的项目的结果!我的 OpenVPN 客户端和 OpenVPN 服务器之间是否存在兼容性问题(可能)?

注意:原始问题包含虚假信息,已进行编辑以使其更加有用。感谢马里乌斯·马图蒂亚下面的回答解决了原始问题中的错误。

在这个过程中,我一直在学习互联网协议- 任何理智的 VPN 配置尝试都离不开对该主题的正式理解。

我当前的配置:

OpenVPN 访问服务器管理界面:

Access Server version:  2.0.17  
Authenticate users with:    pam 
Accepting VPN client connections on IP address: all interfaces  
Port for VPN client connections:    tcp/443, udp/1194   
OSI Layer:  3 (routing/NAT) 
Clients access private subnets using: NAT
Dynamic IP Address Network: 10.0.16.0/24
Group Default IP Address Network: 10.0.16.0/24
Routing: Yes, VPN clients have access to private subnets
Private subnets: 10.0.0.0/16
Yes, Allow access from these private subnets to all VPN client IP addresses and subnets
Yes, client Internet traffic be routed through the VPN
Yes, clients be allowed to access network services on the VPN gateway IP address
Yes, have clients use same DNS servers as server

服务器配置指令:

keepalive 10 60

客户端配置指令:

redirect-gateway
persist-tun
pull

OpenVPN启动报告:

Thu Jul 30 12:37:43 2015 OpenVPN 2.3.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun  8 2015
Thu Jul 30 12:37:43 2015 library versions: OpenSSL 1.0.1f 6 Jan 2014, LZO 2.06
Thu Jul 30 12:37:43 2015 Control Channel Authentication: tls-auth using INLINE static key file
Thu Jul 30 12:37:43 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 12:37:43 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 12:37:43 2015 Socket Buffers: R=[212992->200000] S=[212992->200000]
Thu Jul 30 12:37:43 2015 UDPv4 link local: [undef]
Thu Jul 30 12:37:43 2015 UDPv4 link remote: [AF_INET]52.58.43.124:1194
Thu Jul 30 12:37:43 2015 TLS: Initial packet from [AF_INET]52.58.43.124:1194, sid=6e5a857f 05e9ff87
Thu Jul 30 12:37:44 2015 VERIFY OK: depth=1, CN=OpenVPN CA
Thu Jul 30 12:37:44 2015 VERIFY OK: nsCertType=SERVER
Thu Jul 30 12:37:44 2015 VERIFY OK: depth=0, CN=OpenVPN Server
Thu Jul 30 12:37:44 2015 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Jul 30 12:37:44 2015 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 12:37:44 2015 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Jul 30 12:37:44 2015 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 12:37:44 2015 Control Channel: TLSv1, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-SHA, 2048 bit RSA
Thu Jul 30 12:37:44 2015 [OpenVPN Server] Peer Connection Initiated with [AF_INET]52.58.43.124:1194
Thu Jul 30 12:37:47 2015 SENT CONTROL [OpenVPN Server]: 'PUSH_REQUEST' (status=1)
Thu Jul 30 12:37:47 2015 PUSH: Received control message: 'PUSH_REPLY,explicit-exit-notify,topology subnet,route-delay 5 30,dhcp-pre-release,dhcp-renew,dhcp-release,route-metric 101,ping 10,ping-restart 60,comp-lzo yes,redirect-gateway def1,redirect-gateway bypass-dhcp,redirect-gateway autolocal,route-gateway 10.0.16.129,dhcp-option DNS 10.0.0.2,dhcp-option DNS 8.8.8.8,dhcp-option DOMAIN prd1.o2,register-dns,block-ipv6,ifconfig 10.0.16.131 255.255.255.128'
Thu Jul 30 12:37:47 2015 Option 'explicit-exit-notify' in [PUSH-OPTIONS]:1 is ignored by previous <connection> blocks 
Thu Jul 30 12:37:47 2015 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:4: dhcp-pre-release (2.3.7)
Thu Jul 30 12:37:47 2015 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:5: dhcp-renew (2.3.7)
Thu Jul 30 12:37:47 2015 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:6: dhcp-release (2.3.7)
Thu Jul 30 12:37:47 2015 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:18: register-dns (2.3.7)
Thu Jul 30 12:37:47 2015 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:19: block-ipv6 (2.3.7)
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: timers and/or timeouts modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: explicit notify parm(s) modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: LZO parms modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: --ifconfig/up options modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: route options modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: route-related options modified
Thu Jul 30 12:37:47 2015 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Thu Jul 30 12:37:47 2015 ROUTE_GATEWAY ON_LINK IFACE=wwan0 HWADDR=4e:cd:17:f4:1e:42
Thu Jul 30 12:37:47 2015 TUN/TAP device tun0 opened
Thu Jul 30 12:37:47 2015 TUN/TAP TX queue length set to 100
Thu Jul 30 12:37:47 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Jul 30 12:37:47 2015 /sbin/ip link set dev tun0 up mtu 1500
Thu Jul 30 12:37:47 2015 /sbin/ip addr add dev tun0 10.0.16.131/25 broadcast 10.0.16.255
Thu Jul 30 12:37:53 2015 ROUTE remote_host is NOT LOCAL
Thu Jul 30 12:37:53 2015 /sbin/ip route add 52.58.43.124/32 dev wwan0
Thu Jul 30 12:37:53 2015 /sbin/ip route add 0.0.0.0/1 via 10.0.16.129
Thu Jul 30 12:37:53 2015 /sbin/ip route add 128.0.0.0/1 via 10.0.16.129
Thu Jul 30 12:37:53 2015 Initialization Sequence Completed

答案1

这两句话

  push "remote-gateway 52.58.43.124"
  push "remote-gateway 10.0.31.207"

没有任何意义。首先,它们互相矛盾。其次,这种push选择不存在:来自在线手册

这是当前可以推送的选项的部分列表:--route、--route-gateway、--route-delay、--redirect-gateway、--ip-win32、--dhcp-option、--inactive、--ping、--ping-exit、--ping-restart、--setenv、--persist-key、--persist-tun、--echo、--comp-lzo、--socket-flags、--sndbuf、--rcvbuf

没有提到push gateway

第三,它们是多余的。您需要知道服务器的公共 IP(第一条语句),否则您的客户端将永远无法联系到它,因此无需将其推送给客户端。至于私有 IP(第二条语句),您正在考虑的路由设置(大概)具有对等连接,这将使对方的私有 IP 在建立隧道时为客户端所知,因此无需推送该选项。

如果上述地址不是指服务器的公共 IP 和隧道另一端的私有地址,那么更有甚者客户端没有理由知道这些地址,因此没有push gateway选择。

由于您没有提供服务器和客户端的完整配置文件,因此无法判断是否还有其他错误,但肯定存在上述错误一个错误。

答案2

我认为这是一个过度配置的情况。问题是使用通过以下方式访问私有子网路由。实际上,在这种情况下,只需使用 NAT 即可让您的客户端完全访问10.0.0.2子网。

除此之外,这已经很稳固了。我们正在防止“泄露”DNS-或任何与此有关的事情-这要归功于 OpenVPN 服务器配置中的“通过 VPN 路由所有流量”。此选项还要求您指定如何处理 DNS,因为 DNS 绝对伴随“所有交通”。

解决这个问题,其余的 DHCP 进程就应该负责通过您的私有 DNS 服务器路由客户端 DNS 请求。

此外,一旦解决了这个问题,您将能够直接从客户端使用 10.0.0.2 DNS 服务器,以及通过 SSH 连接到 10.0.16.0/24 子网上的所有设备。讽刺的是,您将无法再通过 SSH 连接到 OpenVPN 服务器本身。

相关内容