我有一个用作路由器的 Linux 机器。有一个 NIC 连接到互联网 (WAN),一个 NIC 连接到 8 端口 GbE 交换机 (LAN),还有一个 NIC 连接到 Linksys 无线 N 路由器 (WLAN)。所有设备之间的路由都运行正常。
我已完全禁用无线路由器上的安全功能,但 WLAN NIC 已设置防火墙,因此它仅接受 DNS 查询和 PPTP VPN 连接。目前 HTTP/HTTPS 流量和其他所有内容均被阻止。
我想运行某个程序来监听 WLAN NIC 的 80/443 端口,并且对于非 VPN 连接,对于任何 HTTP/HTTPS 请求,它都会返回一个显示“未经身份验证”的网页并解释如何登录 VPN。透明代理似乎是我所需要的,但我的所有搜索似乎都将我引向 Squid,它已在我的服务器上运行,对于这个简单的任务来说似乎有点大材小用。
是否有一个更简单、轻量级的程序可以做到这一点,或者我应该忍受并运行两个 Squid 实例(或弄清楚如何配置它)?
或者,我所做的整个 VPN 操作是否完全是无稽之谈,我应该只在无线路由器上启用加密?
答案1
只要您有 netcat 和 shell,就无需安装任何花哨的 HTTP 服务器、代理或 Perl 模块:
$ while true ; do (echo -e 'HTTP 1.0 200 OK\r\n\r\n'; cat static.html ) | nc -q0 -l -p 80 ; 完成
这是原始 netcat 的用法。GNU netcat 略有不同,但您可以使用相同的原理。至于 HTTPS,您可以使用“openssl s_server”的相同技巧。
答案2
正如其他人提到的,您可以设置一个简单的 Web 服务器来监听 http/https 请求。选择您最喜欢的,有很多可供选择。我会用 apache 来做,但只是因为这是我最熟悉的。
一旦 Web 服务器存在,您将需要添加如下所示的 iptables 规则来拦截流量并将其发送到您的本地 Web 服务器。
/sbin/iptables -t nat -A PREROUTING -p tcp -i {wlanif} --dport 80 -j REDIRECT --to-ports 80
/sbin/iptables -t nat -A PREROUTING -p tcp -i {wlanif} --dport 443 -j REDIRECT --to-ports 443
答案3
如果页面完全静态,我会使用晚礼服,内核 Web 服务器。它速度极快,稳定,并且对于静态内容非常可靠。但我不确定它是否可以处理 SSL 流量,因此您可能需要让它将该内容代理回已加载证书的服务器,因为听起来您这台机器上没有证书。