在 Ubuntu 上将 Wifi AP 桥接到以太网 - NAT 和 MASQUERADE

在 Ubuntu 上将 Wifi AP 桥接到以太网 - NAT 和 MASQUERADE

我正在尝试在 Ubuntu 18.04 上设置无线接入点,以将流量从无线客户端转发到通过以太网连接的主机。无需任何互联网接入,只需两个传感器组件相互通信即可。

设置如下:

主机设备(192.168.44.1)--Ubuntu PC 以太网端口(192.168.44.20)--Ubuntu PC Wifi AP(192.168.42.1)--客户端(192.168.42.X)

归根结底,我并不关心 PC,它应该只是充当在客户端和主机之间传输所有软件包的桥梁。

我目前遇到的问题如下:我可以从我的 PC ping 主机和客户端。我可以从客户端 ping PC,但无法从客户端设备 ping 主机设备。我觉得 iptables NAT 是问题所在,我需要设置一个合适的网桥,但我似乎无法做到这一点。

也许有人可以帮我填补缺失的部分,这是我目前所得到的:

/etc/网络/接口 改编自https://help.ubuntu.com/community/WifiDocs/WirelessAccessPoint

auto lo
iface lo inet loopback

# Connection to host A
auto eth0
iface eth0 inet static
address 192.168.44.20
netmask 255.255.255.0

# Wireless AP
auto wlan0
iface wlan0 inet static
hostapd /etc/hostapd/hostapd.conf
address 192.168.42.1
netmask 255.255.255.0

net.ipv4.ip_forward = 1在 sysctl.conf 中启用了

iptables:

iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0 -j ACCEPT

dnsmasq配置文件

interface=eth0,wlan0
no-dhcp-interface=lo,eth0
dhcp-range=192.168.42.20,192.168.42.254,255.255.255.0,12h

hostapd.conf

interface=wlan0
driver=nl80211
ssid=someTestID
hw_mode=g
channel=1
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=TKIP
wpa_passphrase=thisIsMyPassPhrase

答案1

一些没有明确设置、可能缺失的内容包括:

systemd-已解决

此服务可能会干扰dnsmasq。运行ps auxf|grep dnsmasq并查看正在运行的实例是否正在使用您的配置文件运行 - 或者如果没有正在运行的实例,则可能由于端口 53 被占用而被阻止。禁用systemd-resolved或告知dnsmasq不绑定到端口 53。

DHCP 网关(选项 3)和 DNS(选项 6)dnsmasq

检查客户端计算机上的 DNS 和网关。dnsmasq可能无法自动选择网关和 DNS - 添加 dhcp-option=3,192.168.42.1 和 option=6,1.1.1.1。

其他 iptables 规则

您可以运行sudo iptables -nvxLsudo iptables -t nat -nvxL查看是否有其他防火墙程序正在ipfw运行,这可能会干扰您的防火墙规则。将您的配置移至该程序,更改优先顺序,或禁用它。

iptables FORWARD规则

最后一点:如果您正在进行 NAT,则不需要该FORWARD规则。

但是,如果您可以在路由器上通过 192.168.44.20 添加 192.168.42.0/24 的路由,则无需执行 NAT 并可以跳过伪装规则 - 在这种情况下您确实需要转发规则 - 但可能仅当您docker在此机器上运行时才会这样,因为它将FORWARD策略设置为REJECT

当然,您只需发出sudo iptables ...命令即可实时测试任何迭代。您甚至可以进一步禁用 Network-Manager 和 systemd.reslolved,并在不同的终端或屏幕下以前台/调试模式运行,hostapd这样dnsmasq就很容易实时看到哪里出了问题。

相关内容