OpenVPN 网络无法访问

OpenVPN 网络无法访问

我正在努力为 Linode 上的一组虚拟机设置 VPN 访问,拓扑结构如下所示:

db.example.com       LAN: (eth0:0) 192.168.154.127/255.255.128.0
utility.example.com  LAN: (eth0:0) 192.168.164.229/255.255.128.0
并且,LAN 上有更多的服务器,其地址在同一范围内。公用事业服务器托管 OpenVPN

这是我的服务器的 OpenVPN 配置,客户端配置不可用,因为我正在使用对于OSX:

dev tun
mode server
tls-server
proto udp
port 1194
server 10.77.22.0 255.255.255.0
push "route 10.77.22.0 255.255.255.0"
push "route 192.168.154.0 255.255.128.0"
ifconfig-pool-persist ipp.txt
persist-key
persist-tun
client-to-client
ca ca.crt
dh dh1024.pem
cert server.crt
key server.key
tls-auth ta.key 0
cipher BF-CBC
comp-lzo
user nobody
group nogroup
keepalive 10 120
status openvpn-status.log
verb 3 

当连接到 VPN 时,我可以 ping VPN 网关,并通过 SSH 登录,并且所有正常操作都没有问题,tcpdump确认这些数据包正在通过tun0我的 Mac 上的设备。

尝试192.168.154.127通过 VPN 进行 ping 操作不起作用,tcpdump确认设备上没有活动tun0

我通过阅读理解我需要route向我的添加一个配置server.conf,添加以下行:

route 192.168.154.0 255.255.128.0

服务器在启动时抛出一个错误,内联在这里:

/sbin/route add -net 192.168.154.0 netmask 255.255.128.0 gw 10.77.22.2
route: netmask doesn't match route address
Usage: route [-nNvee] [-FC] []           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

=Use '-A ' or '--'; 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)

我想如果我能解决这个/sbin/route问题,情况就会按预期进行,但我不明白为什么会失败。

客户端通常会获得这样的地址:


tun0: flags=8951 mtu 1500
    inet 10.77.22.6 --> 10.77.22.5 netmask 0xffffffff 
    open (pid 5142)

答案1

配置文件中的语句route需要引用网络 ID 192.168.128.0,而不是192.168.154.0route这是错误的,因为您给了它一个网络 ID 和子网掩码,而当把它们放在一起时,主机 ID 部分为 1。

192.168.154.0 的二进制表示为:

11000000.10101000.10011010.00000000

子网掩码 255.255.128.0 如下所示:

11111111.11111111.10000000.00000000

应用于 192.168.154.0“网络 ID”的子网掩码如下所示:

    11000000.10101000.10011010.00000000
AND 11111111.11111111.10000000.00000000
---------------------------------------
    11000000.10101000.10000000.00000000 = 192.168.128.0

您可以看到,192.168.154.0 被 /17 子网掩码屏蔽后,子网掩码末尾会显示 1。192.168.154.0/17“网络”的网络 ID 实际上是 192.168.128.0/17。更改route配置文件中的语句,route命令将停止出错。

答案2

需要启用ip_forward。除非启用,否则 Linux 机器不会路由。在 Ubuntu 上,解决这个问题的一个简单方法是调整 /etc/sysctl.conf,只需取消注释 ip_forward 行。然后重新启动系统或运行sysctl -p

相关内容