65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 OpenWRT 路由器和 Wireguard 构建完全安全的局域网

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2024年7月5日

CPOL

3分钟阅读

viewsIcon

2914

使用连接了 Wireguard 的 OpenWRT 路由器保护本地网络。防止射频数据泄漏和间谍读取互联网流量。

引言

以太网线存在两个问题。 1) 它们容易受到流量检查。 2) 它们容易发生射频泄漏,从而可以重建流量。 当我们使用普通的以太网电缆将本地路由器相互连接时,即使它们是 HTTPS 连接,我们也容易受到流量窥探,并且可以进行数据挖掘。 可以通过使用 Wireguard 隧道保护本地连接并在无线设备上启用 WPA3 WiFi 来缓解这种情况。 我们 ISP 提供的互联网也是不安全的,因为这些连接倾向于泄漏数据,从而导致互联网习惯重建,因此人们通常使用 VPN 来缓解这种情况。 本文介绍如何使用 OpenWRT 路由器实现这些目标。

下图显示了安全本地网络的一般概念。

当使用以太网电缆代替 WPA3 WiFi 时,本地设备之间的 Wireguard 隧道对于保护连接是必要的。 本文的下一部分介绍了如何使用 Wireguard 连接连接两个 OpenWRT 路由器,以便 Wireguard 隧道将用作另一个路由器的 WAN。

必备组件

要实现本文,您需要两个刷写了 OpenWRT 的路由器或者一个 OpenWRT 路由器 和一个安装了 Wireguard 的客户端(带有 LAN 的 Windows PC)。 您可以跳过适当的部分。 您需要在 OpenWRT 路由器上启用 LAN 和 WiFi。 在 OpenWRT 路由器上安装以下软件包并重新启动。 

opkg update
opkg install wireguard-tools luci-proto-wireguard

本地 Wireguard 隧道实现

第一步是在 OpenWRT 路由器上将 Wireguard 配置为服务器。 我们配置了两个服务器,每个服务器都有一个对等点。 请在此处此处此处阅读有关 Wireguard 的更多信息。

OpenWRT 路由器上的 Wireguard 服务器

将以下行添加到 /etc/config/network 文件以创建服务器,并将接口分配给 LAN 防火墙区域。

...
config interface 'wgserver'
	option proto 'wireguard'
	option private_key '<private key of server1>'
	option listen_port '51820'
	list addresses '192.168.9.1/24'
	option mtu '2000'

config wireguard_wgserver
	option description 'desktop'
	option public_key '<public key of peer1>'
	option private_key '<private key of peer1>'
	option preshared_key '<preshared key of peer1>'
	list allowed_ips '0.0.0.0/0'

config device
	option name 'wgserver'
	option ipv6 '0'
	option acceptlocal '1'

config interface 'wgserver_r1'
	option proto 'wireguard'
	option private_key '<private key of server2>'
	option listen_port '51821'
	list addresses '192.168.91.1/24'
	option mtu '2000'

config wireguard_wgserver_r1
	option description 'router1'
	option public_key '<public key of peer2>'
	option private_key '<private key of peer2>'
	option preshared_key '<preshared key of peer2>'
	list allowed_ips '0.0.0.0/0'
	list allowed_ips '::/0'

config device
	option name 'wgserver_r1'
	option ipv6 '0'
	option acceptlocal '1'

将以下行添加到 /etc/config/firewall,以粗体显示的行需要添加

...
config zone
	option name 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	list network 'lan'
	list network 'wifi24'
	list network 'wifi50'	
    list network 'wgserver'
	list network 'wgserver_r1'

...

重新启动路由器,检查接口是否确实出现并已分配给 luci 中的正确防火墙区域。

Windows 上的 Wireguard 客户端

https://www.wireguard.com/install/ 将包含所有客户端,请安装它们。 在 Windows 上添加以下隧道配置。

[Interface]
PrivateKey = <private key>
Address = 192.168.9.7/32
DNS = 8.8.8.8

[Peer]
PublicKey = <public key>
PresharedKey = <pre shared key>
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = 192.168.10.1:51820

其中 192.168.10.1 替换为 br-lan 或类似接口的本地网关。 连接到隧道后检查互联网访问。 如果成功,则您的隧道工作正常。

OpenWRT 路由器上的 Wireguard 客户端

如果您有第二个 OpenWRT 路由器,请按照本节操作。 配置为客户端的 Wireguard 会自动替换 WAN 作为其互联网访问。 这会强制路由器的所有客户端使用隧道作为互联网来源,如果隧道不正确,互联网将无法工作。 

将以下行添加到客户端路由器的 /etc/config/network

...
config interface 'wgc'
    option proto 'wireguard'
    option private_key '<private key>'
    list dns '8.8.8.8'
    option mtu '2000'
    list addresses '192.168.91.8/32'

config wireguard_wgc
    option description 'Imported peer configuration'
    option public_key '<public key>'
    option preshared_key '<preshared key>'
    list allowed_ips '0.0.0.0/0'
    option endpoint_host '192.168.10.1'
    option endpoint_port '51821'
    option route_allowed_ips '1'
    option persistent_keepalive '20'

通过将以下行添加到 /etc/config/firewall 来将接口分配给 WAN 防火墙区域

...
config zone
    option name 'wan'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'
    list network 'wan'
    list network 'wan6'
    list network 'wgc'
...

重新启动路由器并检查互联网数据是否正在通过接口和路由器的 WiFi 客户端传输。 

在 OpenWRT 路由器上安装 OpenWRT VPN。

请参阅以下文章,以获取有关向 OpenWRT 路由器添加弹性 VPN 的说明。 链接此处。 本节需要以链接文章中所述的方式设置 VPN。 本文的其余步骤是将 Wireguard 服务器添加到文章中创建的自定义表中,以便 Wireguard 服务器使用 OpenVPN 隧道 'tun0' 用于互联网流量。

修改 Kill Switch 脚本

1) 在配置为弹性 VPN 的路由器中添加文件 /etc/kill-switch/kill-switch-setup-wgserver.sh ,内容如下。 使文件可执行。

#!/bin/sh

/etc/openvpn/kill-switch/activate-kill-switch-for-interface.sh 192.168.9.0/24 wgserver 192.168.9.1 custom_lan

2) 添加文件 /etc/kill-switch/kill-switch-setup-wgserver_r1.sh ,内容如下。 使文件可执行。

#!/bin/sh

/etc/openvpn/kill-switch/activate-kill-switch-for-interface.sh 192.168.91.0/24 wgserver_r1 192.168.91.1 custom_lan

3) 使用以下行修改 /etc/hotplug.d/iface/99-wan-interfaces 文件,其他行保持不变。

...
wgserverstateret=`cat /tmp/wgserverstate`
wgserver_r1stateret=`cat /tmp/wgserver_r1state`

...
wgserverstarted=`echo "$wgserverstateret" started | awk '{ print ($1 == $2) ? 1 : 0 }'`
wgserver_r1started=`echo "$wgserver_r1stateret" started | awk '{ print ($1 == $2) ? 1 : 0 }'`
...
killswitchwgserverstateret=`cat /tmp/killswitchwgserverstate`
killswitchwgserver_r1stateret=`cat /tmp/killswitchwgserver_r1state`
...
killswitchwgserverstarted=`echo "$killswitchwgserverstateret" started | awk '{ print ($1 == $2) ? 1 : 0 }'`
killswitchwgserver_r1started=`echo "$killswitchwgserver_r1stateret" started | awk '{ print ($1 == $2) ? 1 : 0 }'`

...
activatewgserverkillswitch=0
activatewgserver_r1killswitch=0
...
if [ "${ACTION}" == "ifdown" ] && [ "${INTERFACE}" = "wgserver" ]
then
    rm /tmp/killswitchwgserverstate
fi

if [ "${ACTION}" == "ifdown" ] && [ "${INTERFACE}" = "wgserver_r1" ]
then
    rm /tmp/killswitchwgserver_r1state
fi
...
if [ "${ACTION}" == "ifup" ] && [ "${DEVICE}" = "wan" ]
then
    echo started > /tmp/wanstate
    ...
    if [ $wgserverstarted -eq 1 ] && [ $killswitchwgserverstarted -eq 0 ]
    then
        activatewgserverkillswitch=1
    fi
    if [ $wgserver_r1started -eq 1 ] && [ $killswitchwgserver_r1started -eq 0 ]
    then
        activatewgserver_r1killswitch=1
    fi
fi
...
if [ "${ACTION}" == "ifup" ] && [ "${DEVICE}" = "wgserver" ]
then
    echo started > /tmp/wgserverstate
    if [ $wanstarted -eq 1 ] && [ $killswitchwgserverstarted -eq 0 ]
    then
        activatewgserverkillswitch=1
    fi
fi

if [ "${ACTION}" == "ifup" ] && [ "${DEVICE}" = "wgserver_r1" ]
then
    echo started > /tmp/wgserver_r1state
    if [ $wanstarted -eq 1 ] && [ $killswitchwgserver_r1started -eq 0 ]
    then
        activatewgserver_r1killswitch=1
    fi
fi
...
if [ $activatewgserverkillswitch -eq 1 ]
then
    echo started > /tmp/killswitchwgserverstate
    /etc/openvpn/kill-switch/kill-switch-setup-wgserver.sh
fi

if [ $activatewgserver_r1killswitch -eq 1 ]
then
    echo started > /tmp/killswitchwgserver_r1state
    /etc/openvpn/kill-switch/kill-switch-setup-wgserver_r1.sh
fi
...
exit 0

现在重新启动路由器后,Wireguard 流量现在将使用来自 ‘tun0’ VPN 隧道的互联网。 通过观察 luci 中的流量数据来检查是否是这种情况。

WPA3 WiFi

您的 WiFi 接口必须配置为使用 VPN 隧道,如前面提到的文章中所述,并设置为 WPA3 安全性,以便客户端设备可以访问 VPN。 WiFi 密码必须保持安全,如果需要,可以使用不同的访客无线网络。 

结束

在实施这些概念之后,通过以太网电缆连接的本地路由器和设备将不会泄漏数据,无论是通过连接的间谍软件还是射频泄漏。 云服务器还可以利用其 LAN 网络中的 Wireguard 来提高隐私性并为流量增加一层保护。

© . All rights reserved.