OpenWRT 上的 OpenVPN:通过 VPN 隧道路由特定子网

OpenWRT 上的 OpenVPN:通过 VPN 隧道路由特定子网

我已经设置了一个安装了 OpenWRT 15.05(Chaos Calmer)的路由器,并配置了两个 Wi-Fi 网络,每个网络都有自己的网络接口:

  • 无线网络-1: 界面br-lanIP 地址 10.0.2.1;地址范围 10.0.2.0/24
  • 无线网络-2: 界面br-vpnIP 地址 10.0.10.1;地址范围 10.0.10.0/24

我配置了 OpenVPN 客户端软件来连接到 vpn 服务vpn服务1在OpenWRT系统日志中我可以看到openvpn客户端成功连接到vpn服务1和界面tun0已打开。

我的目标是路由来自网络的所有流量无线网络-1(10.0.2.0/24)通过默认网关;并将所有互联网流量路由到无线网络-2(10.0.10.0/24)通过 vpn 接口tun0。注意。我仍然希望设备连接到无线网络-2网络(10.0.10.0/24)以便能够连接到该网络上的其他设备。

根据我目前的配置 -无线网络-1网络可以通过默认网关连接到互联网。但是连接到无线网络-2无法连接到互联网。欢迎任何帮助 :)

我的配置如下所述:

  1. 防火墙配置(/etc/config/firewall):

    config rule config rule option src 'wan' option dest 'lan' option proto 'esp' option target 'ACCEPT' config rule option src 'wan' option dest 'lan' option dest_port '500' option proto 'udp' option target 'ACCEPT' config zone option input 'ACCEPT' option output 'ACCEPT' option name 'stream' option network 'stream' option masq '1' option forward 'ACCEPT'
    config zone option input 'ACCEPT' option output 'ACCEPT' option name 'stream_vpn' option forward 'ACCEPT' option network 'stream_vpn' option masq '1' config forwarding option dest 'stream' option src 'stream_vpn' config forwarding option dest 'stream_vpn' option src 'stream'

  2. 网络配置(/etc/config/network):

    config interface 'lan' option ifname 'eth1' option force_link '1' option type 'bridge' option proto 'static' option netmask '255.255.255.0' option ip6assign '60' option ipaddr '10.0.2.1' config interface 'wan' option ifname 'eth0' option proto 'dhcp' config interface 'stream_vpn' option proto 'none' option ifname 'tun0' config interface 'stream' option proto 'static' option ipaddr '10.0.10.1' option netmask '255.255.255.0' option type 'bridge' option _orig_ifname 'stream_lan wlan1-2' option _orig_bridge 'true' option ifname 'stream_lan'

  3. OpenVPN 客户端‘vpnservice1’配置(/etc/openvpn):

config openvpn 'vpnservice1' option dev_type 'tun' option client '1' option resolv_retry 'infinite' option persist_tun '1' option persist_key '1' option tun_ipv6 '1' option cipher 'AES-256-CBC' option remote_random '0' option route_delay '2' option route_nopull '1' option route '10.0.10.1 255.255.255.255' option auth_retry 'interact' option auth 'SHA1' option remote_cert_tls 'server' option reneg_sec '0' option tls_client '1' option verb '3' option mute '20' option float '1' option ifconfig_nowarn '1' option auth_user_pass '/etc/openvpn/vpnservice1/userpass.txt' option port '1194' option remote 'vpnservice1.com' option auth_nocache '1' option dev 'tun0' option proto 'udp' option comp_lzo 'adaptive' option enabled '1' option fast_io '1' option tun_mtu '1500' option tun_mtu_extra '32' option ca '/etc/openvpn/vpnservice1/vpnservice1_com.crt' option ping '15' option ping_restart '0' option tls_auth '/etc/openvpn/vpnservice1/vpnservice1_com_tls.key 1' option script_security '2'

  1. 接口列表(ifconfig -a):

    br-lan Link encap:Ethernet HWaddr C0:56:27:7A:92:D3 inet addr:10.0.2.1 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::c256:27ff:cd56:92a1/64 Scope:Link inet6 addr: fd1d:c378:aa11::1/60 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15469 errors:0 dropped:0 overruns:0 frame:0 TX packets:15465 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2029206 (1.9 MiB) TX bytes:9594955 (9.1 MiB) br-vpn Link encap:Ethernet HWaddr 06:25:9C:13:97:F5 inet addr:10.0.10.1 Bcast:10.0.10.255 Mask:255.255.255.0 inet6 addr: fe80::425:cc22:ab34:22e1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:640 errors:0 dropped:0 overruns:0 frame:0 TX packets:566 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:101972 (99.5 KiB) TX bytes:71890 (70.2 KiB) eth0 Link encap:Ethernet HWaddr C2:56:27:7A:92:D3 inet addr:10.0.1.21 Bcast:10.0.1.255 Mask:255.255.255.0 inet6 addr: fe80::c056:34ff:abcd:84d3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:13175 errors:0 dropped:0 overruns:0 frame:0 TX packets:12879 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:532 RX bytes:8697083 (8.2 MiB) TX bytes:1939234 (1.8 MiB) Interrupt:194 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.8.134 P-t-P:10.8.8.133 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  2. 路由列表(route -n):

    Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.1.1 0.0.0.0 UG 0 0 0 eth0 10.0.10.0 0.0.0.0 255.255.255.0 U 0 0 0 br-vpn 10.0.10.1 205.1.2.3 255.255.255.255 UGH 0 0 0 tun0 205.1.2.3 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan


@porchez 我尝试了你建议的更改。我安装了 iproute2 包。

在 /etc/iproute2/rt_tables 中我添加了以下行

0 admin

我创建了一个新的 shell 脚本 /etc/openvpn/guest-up.sh 并添加了以下行

ip rule add from 10.0.10.0/24 table admin
ip route add default dev tun0 table admin 

在我的 openvpn 配置文件 (/etc/config/openvpn) 中添加了选项

option script_security '2'
option up '/etc/openvpn/guest-up.sh'

重新启动 VPN 会话后,系统日志条目表明 VPN 会话已成功连接。但是 Wi-Fi 网络未通过 VPN 连接到互联网。

正在播放的ip route list节目

0:      from all lookup 128
0:      from 10.0.10.0/24 lookup 1
0:      from 10.0.10.0/24 lookup 2
0:      from 10.0.10.0/24 lookup 3
0:      from 10.0.10.0/24 lookup 4
0:      from 10.0.10.0/24 lookup 5
0:      from 10.0.10.0/24 lookup 6
0:      from 10.0.10.0/24 lookup 7
0:      from 10.0.10.0/24 lookup 8

运行命令ip route show table admin | grep "10.0.10.0返回

10.0.10.0/24 dev br-vpn  proto kernel  scope link  src 10.0.10.1
broadcast 10.0.10.0 dev br-vpn  table local  proto kernel  scope link  src 10.0.10.1

抱歉,我对 Linux 网络和路由还不太熟悉。

答案1

使用 iproute2 包应该可以实现:

opkg update
opkg install ip

我刚开始使用它,所以我想我只能给出一些提示,而无法针对您的具体情况提供可行的解决方案。使用 iproute2,您可以实现策略路由(条件路由)。在您的例子中,您需要为您的两个设备(br-lan 和 br-vpn)设置两个不同的路由。对于 br-lan,这似乎已经到位。现在您需要通过您的 tun0 设备和 vpn 路由来自 br-vpn(或它所代表的子网)的所有流量。

我的猜测可能是这样的(可能不起作用,但希望能让你朝着正确的方向前进):

编辑 /etc/iproute2/rt_tables 并添加此行

0 admin 

然后:

ip rule add from 10.0.10.0/24 table admin
ip route add default dev tun0 table admin  

直觉:你为来自 10.0.10.0/24 子网的所有流量添加一条规则,并告诉 iproute2 查看管理表以了解如何处理此问题。然后在管理表中添加一条默认规则,默认通过 VPN 路由所有内容。

我对您的配置有点困惑。您确定“route -n”输出和 ifconfig 以及 /etc/config/network 输出来自同一会话吗?

请注意,这些更改不会反映在“route -n”中,而是查看

ip rule list
ip route show table admin 

相关内容