我已使用以下命令在我的服务器上成功设置了接入点wifi-ap 快照
wakatana@server:~$ sudo wifi-ap.config get
debug: false
dhcp.lease-time: 12h
dhcp.range-start: 10.0.60.2
dhcp.range-stop: 10.0.60.199
disabled: false
share.disabled: false
share.network-interface: eth0
wifi.address: 10.0.60.1
wifi.channel: 6
wifi.country-code:
wifi.hostapd-driver: nl80211
wifi.interface: wlan0
wifi.interface-mode: direct
wifi.netmask: 255.255.255.0
wifi.operation-mode: g
wifi.security: wpa2
wifi.security-passphrase: passwordpassword
wifi.ssid: Ubuntu
现在我想将所有流量从连接的客户端路由到一个特定的 IP_ADDRESS:PORT(当时它与 AP 运行在同一台机器上)。它应该像客户端访问 www.google.com 一样工作,它将被重定向到 127.0.0.1:555
如果我理解正确的话,至少有两种可能的解决方案,但我不知道如何使其在实践中发挥作用:
- dnsmasq + nginx - 我以前从未这样做过,所以对我来说似乎过于复杂,我不知道它是否不会破坏我当前的 DNS
- iptables - 在这里我有基本的 iptables 经验,但我迷失在 PREROUING、POSTROUTING、DNAT、SNAT 等中。
我试过以下
$ sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 555 -j DNAT --to-destination 127.0.0.1
$ sudo iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 14 packets, 1116 bytes)
pkts bytes target prot opt in out source destination
1852 351K DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
0 0 DNAT tcp -- wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:555 to:127.0.0.1
但它没有任何效果:
- 打开谷歌-https://google.com
- 打开whatsmyip -http://www.whatsmyip.org/
- 无法访问网站 -https://不存在的页面
- 无法访问网站 -http://不存在的页面
答案1
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 555 -j DNAT --to-destination 127.0.0.1
您当前的规则只会将流量重定向<some_server>:555
至127.0.0.1:555
。 HTTP 使用端口 80,HTTPS 使用端口 443,因此两者都不符合上述规则。
此外,在这种特定情况下,您将需要使用 REDIRECT,而不是 DNAT,因为您要将数据包的目的地从 (not-this-host) 更改为 (this-host)。
这是针对 HTTP 的:
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-ports 555
对于 HTTPS,您可能必须设置启用 SSL/TLS 的服务的另一个副本。假设您将其放置到端口 4555,则 HTTPS 的规则为:
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 443 -j REDIRECT --to-ports 4555
...而您的下一个问题可能是现代网络浏览器在应该通过 HTTPS 连接到 Google 时不会接受任何随机证书。