将外部 WiFi(互联网)桥接到本地 LAN/WiFi

将外部 WiFi(互联网)桥接到本地 LAN/WiFi

我的情况有点奇怪。我在家里通过公司 WiFi 上网。我想在家里建立一个带有本地 WiFi 的 LAN,桥接到公司 WiFi 以访问互联网。

因此,我想要一个具有两个 WiFi 天线的路由器:一个内部(家庭)WiFi 和一个外部(公司)WiFi 连接。然后,我可以将 PC 插入家庭以太网/WiFi 并访问本地共享文件、打印机等以及互联网,就好像公司 WiFi 是 ADSL/光纤/任何线路一样。

这样的硬件已经存在了吗?有什么提示我应该搜索什么吗?

我曾考虑过构建一台 PC 来实现这一点,使用多个 WiFi 适配器/PCIe 卡。但是,我真正想要的是双频 802.11ac,具有向后兼容性,可以支持任何其他硬件想要连接,而且我不相信一个充当“服务器”的小适配器可以像真正的路由器那样提供这种功能……?

答案1

好的,现在我可以回答我自己的问题了。

我利用 Tyson 评论中的提示开始操作,但还有很多事情要做。尤其是因为我没有提到我连接的公司网络是 WPA2-Enterprise PEAP MSCHAPv2 认证 (eduroam)。

我买了一些相当便宜的硬件:TP-Link TL-WA801ND 接入点(无线 N 300MB 单频 2.4Ghz);和华硕 AC750 路由器(无线 AC 双频)。

这两块硬件都无法以客户端模式连接到具有 PE​​AP 身份验证的主机网络。

我发现了一个开源固件替代品,开放Wrt, 和一些维基百科文章Youtube 视频承诺实现采用 PEAP 的客户端模式。

我读了很多关于WA801ND 上的可用存储空间问题接入点。不过,我很幸运。我收到的是 WA801ND V5,它的存储空间是以前版本的两倍(8MB)。

但是,没有关于在 V5 上安装的内容维基百科#1以及令人恐惧的搭建说明维基百科#2(为什么 OpenWrt 的站点上有两个 wiki?)。

但我很幸运,因为我发现git 提交详细说明对 V5 的支持,尽管 wiki 上说了什么,但还是提供了关于如何刷新的说明。

通读一些文档,按照 git commit 中的说明,终于在 WA801ND 接入点上安装了 OpenWrt。

这会在设备上获得仅限终端的基本固件,它不支持客户端模式下的 PEAP 身份验证。

因此第一步是启用 PEAP 支持。

OpenWrt 带有自己的软件包管理器,但 WA801ND 没有互联网接入,所以我必须手动获取软件包。不幸的是软件包存储库自从大多数在线文档编写以来,结构已经发生了变化,因此找到这些软件包变得很棘手。

我最终发现有两个子存储库,一个对于“目标”(设备)和一个拱门(中央处理器)。

因此,一旦我下载并将wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipk包 scp 到/tmp设备上,我就可以opkg remove wpad-mini启用opkg install /tmp/wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipkwpa_supplicant PEAP 支持。

我尝试通过配置文件配置 WA801ND,但这本身就是一个大项目。我真的很想要一个 Web GUI 界面。OpenWrt 中的标准是露西,它有一堆依赖项需要下载并 scp 到设备上。

幸运的是,我找到了一个维基页面使用脚本(靠近底部)来自动化。不幸的是,该脚本很旧,缺少一两个依赖项,并且包 URL 错误。我修复了它,然后,Luci 就安装好了!

从那里,通过 WA801ND 接入点上的 Luci Web 界面,很容易建立到 PEAP 网络的客户端模式连接,然后将接入点以太网插入 AC750 路由器的 WAN 端口。我必须将路由器的子网从 192.168.1.x 更改为 192.168.2.x,这样它就不会与接入点冲突。然后一切都“正常工作”(终于!)。

修复后的脚本如下,供参考:

#!/bin/sh
#assumes the user has egrep, wget, ssh, and scp

# Change this to match your router
architecture="mipsel_24kc"
target="ramips/mt76x8"

# These should be fine unless you've changed something
user="root"
ip_address="192.168.1.1"


url="https://downloads.openwrt.org/snapshots/packages/${architecture}/"
target_url="http://downloads.openwrt.org/snapshots/targets/${target}/packages/"
tmpdir="/tmp/luci-offline"
packages_base="liblua lua libuci-lua libubus libubus-lua uhttpd rpcd"
packages_luci="luci-base luci-lib-ip luci-lib-nixio luci-theme-bootstrap luci-mod-admin-full luci-lib-jsonc liblucihttp liblucihttp-lua"
packages_target="libiwinfo-lua"

mkdir "$tmpdir"
cd "$tmpdir"

echo "Downloading base packages"
wget --quiet -N "${url}base/Packages" || echo "Failed to get base Packages"
for pkg in $packages_base; do
    pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
    pkgurl="${url}base/${pkgfile}"
    wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done

echo "Downloading Luci packages"
wget --quiet -N "${url}luci/Packages" || echo "Failed to get luci Packages"
for pkg in $packages_luci; do
    pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
    pkgurl="${url}luci/${pkgfile}"
    wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done

echo "Downloading target-specific packages"
wget --quiet -N "${target_url}/Packages" || echo "Failed to get target Packages"
for pkg in $packages_target; do
    pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
    pkgurl="${target_url}/${pkgfile}"
    echo "Downloading $pkgurl"
    wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done

echo "Copying packages to device"
ssh "${user}@${ip_address}" mkdir -p /tmp/luci-offline-packages
scp *.ipk "${user}@${ip_address}":/tmp/luci-offline-packages
echo "Installing pacakges"
ssh "${user}@${ip_address}" opkg install /tmp/luci-offline-packages/*.ipk
echo "Deleting packages from device"
ssh "${user}@${ip_address}" rm -rf /tmp/luci-offline-packages/

echo "Starting HTTP server and enabling on boot"
ssh "${user}@${ip_address}" /etc/init.d/uhttpd start
ssh "${user}@${ip_address}" /etc/init.d/uhttpd enable

echo "Deleting packages from PC"
cd
rm -rf "$tmpdir"

相关内容