推动桥接 OpenVPN 服务器的正确路线是什么?

推动桥接 OpenVPN 服务器的正确路线是什么?

我在一台私有 IP 地址为 10.0.0.13 的机器上设置了一个 OpenVPN 服务器。网关位于 10.0.0.2,它将 10.0.0.* 地址分发给网络上的其他机器。VPN 设置了桥接。我的 /etc/network/interfaces 文件如下所示:

# Bring these interfaces up automatically
auto lo br0

# The loopback network interface
iface lo inet loopback

# The bridge connection
iface br0 inet static
    address         10.0.0.13
    bridge_ports    eth0
    bridge_stp      on
    broadcast       10.0.0.255
    gateway         10.0.0.2
    netmask         255.255.255.0
    network         10.0.0.0

# The primary network interface
iface eth0 inet manual
    up ifconfig $IFACE 0.0.0.0 up
    up ip link set $IFACE promisc on
    down ip link set $IFACE promisc off
    down ifconfig $IFACE down

服务器配置文件(/etc/openvpn/server.conf)如下所示:

port 1194
proto udp
dev tap0
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"
ca ca.crt
cert VPNserver.crt
key VPNserver.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt

server-bridge 10.0.0.13 255.255.255.0 10.0.0.200 10.0.0.219
push "route 10.0.0.2 255.255.255.0"

push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
max-clients 20
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 3
crl-verify crl.pem

我认为 server-bridge 及其下面的行可能需要调整。OpenVPN 是否应该为自己和连接客户端创建一个子网?起初我以为我可以让 OpenVPN 在同一子网中分配 IP 地址,只要它们在路由器的 DHCP 范围之外即可;现在我不太确定了。

无论如何,以下是当前配置的症状。客户端计算机(位于 10.6.0.0 网络中 - 您将在后面的输出中看到这一点)能够连接,但只有 OpenVPN 服务器的 IP 可 ping 通,我无法浏览网页。我是从 Linux CLI 连接的;以下是我得到的一些输出,它们让我相信路由是问题所在。我已将与我相关的输出加粗。

Fri Jun  3 12:54:51 2011 [VPNserver] Peer Connection Initiated with [AF_INET]SERVER.PUBLIC.IP.ADDRESS:1194  
Fri Jun  3 12:54:53 2011 SENT CONTROL [VPNserver]: 'PUSH_REQUEST' (status=1)  
Fri Jun  3 12:54:53 2011 PUSH: Received control message: 'PUSH_REPLY,route 10.0.0.2 255.255.255.0,redirect-gateway def1 bypass-dhcp,route-gateway 10.0.0.13,ping 10,ping-restart 120,ifconfig 10.0.0.201 255.255.255.0'  
Fri Jun  3 12:54:53 2011 OPTIONS IMPORT: timers and/or timeouts modified  
Fri Jun  3 12:54:53 2011 OPTIONS IMPORT: --ifconfig/up options modified  
Fri Jun  3 12:54:53 2011 OPTIONS IMPORT: route options modified  
Fri Jun  3 12:54:53 2011 OPTIONS IMPORT: route-related options modified  
Fri Jun  3 12:54:53 2011 ROUTE default_gateway=10.6.0.1  
Fri Jun  3 12:54:53 2011 TUN/TAP device tap0 opened  
Fri Jun  3 12:54:53 2011 TUN/TAP TX queue length set to 100  
Fri Jun  3 12:54:53 2011 /sbin/ifconfig tap0 10.0.0.201 netmask 255.255.255.0 mtu 1500 broadcast 10.0.0.255  
Fri Jun  3 12:54:53 2011 /sbin/route add -net SERVER.PUBLIC.IP.ADDRESS netmask 255.255.255.255 gw 10.6.0.1  
**SIOCADDRT: File exists  
Fri Jun  3 12:54:53 2011 ERROR: Linux route add command failed: external program exited with error status: 7**  
Fri Jun  3 12:54:53 2011 /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.0.0.13  
Fri Jun  3 12:54:53 2011 /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.0.0.13  
**Fri Jun  3 12:54:53 2011 /sbin/route add -net 10.0.0.2 netmask 255.255.255.0 gw 10.0.0.13
route: netmask doesn't match route address**  
Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables  
   route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.  

   route {-h|--help} [<AF>]              Detailed usage syntax for specified AF.  
   route {-V|--version}                  Display version/author and exit.  

  -v, --verbose            be verbose  
  -n, --numeric            don't resolve names  
  -e, --extend             display other/more information  
  -F, --fib                display Forwarding Information Base (default)  
  -C, --cache              display routing cache instead of FIB  

  <AF>=Use '-A <af>' or '--<af>'; default: inet  
  List of possible address families (which support routing):  
   inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)  
   netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)  
   x25 (CCITT X.25)  
**Fri Jun  3 12:54:53 2011 ERROR: Linux route add command failed: external program exited with error status: 4**  
Fri Jun  3 12:54:53 2011 GID set to nogroup  
Fri Jun  3 12:54:53 2011 UID set to nobody  
Fri Jun  3 12:54:53 2011 Initialization Sequence Completed  

所以我想我正在寻找:

  1. 让这些错误消失
  2. 能够访问 10.0.0.0 网络上的 OpenVPN 服务器以外的机器
  3. 通过 VPN 路由所有流量(网页浏览等)

答案1

如果您正在桥接,那么您可能不应该推动任何路线。

答案2

好的,所以从技术上讲@Zoredache 是正确的。我的问题是,“对于桥接的 OpenVPN 服务器,推送的正确路由是什么?”我不应该推送route 10.0.0.2 255.255.255.0(无论如何都应该推送route 10.0.0.0 255.255.255.0)。删除该行解决了我的问题的第一部分。

我的问题的第二部分(无法 ping 10.0.0.0 网络上的其他机器)与我没有提到的细节有关,即该服务器位于 VMWare 虚拟机上。感谢这篇博文,我发现“ESXi虚拟交换机默认丢弃混杂数据包”,并且我学习了如何配置虚拟机以避免这样做。

我无法实现第三个目标,即通过 VPN 路由所有流量,但我认为这对于此特定部署并不重要。默认配置中的注释建议通过取消注释push "redirect-gateway def1 bypass-dhcp"“配置所有客户端通过 VPN 重定向其默认网络网关,导致所有 IP 流量(例如 Web 浏览和 DNS 查找)都通过 VPN”,但当我取消注释时,我根本无法离开网络。

答案3

使用路由 openvpn 时,接口是隐含的。但是,使用桥接 openvpn 时,您不能再假设任何内容都可以隐含。应该可以告知路由流经哪个 ip。例如(命令行 linux):ip ro add 8.0.0.0/8 via 1.2.3.4。

相关内容