У меня есть компьютер, который действует как сервер / шлюз / маршрутизатор для локальной сети. И я хотел бы добавить третий интерфейс, который будет действовать как точка доступа к Wi-Fi, например, чтобы устройства LAN могли подключаться к устройствам, подключенным к WIFI, и любое из них могло получить доступ к Интернету через шлюз.
У меня уже есть подключенные к локальной сети устройства, которые отлично работают с доступом в Интернет через шлюз и службы на шлюзе. (ssh, http и т. д.). Но по какой-то причине устройства, подключенные к точке доступа WIFI, не могут подключиться к Интернету или шлюзу.
Я подозреваю, что это может быть простая деталь в моих конфигурациях, которую я не замечаю. (скорее всего, в моей настройке IP-адресации и / или в моей настройке маскарада shorewall? ..)
Короткие моменты:
- Шлюз может получить доступ к Интернету / WAN.
- Проводной / LAN может получить доступ к Интернету через шлюз
- Проводная / локальная сеть может получить доступ к службам, работающим на шлюзе.
- Однако устройства, подключенные к WIFI, могут нет достичь шлюза, локальной сети или Интернета
- они, по-видимому, правильно аутентифицируются hostapd
- они действительно получают предполагаемые настройки DHCP, казалось бы, в порядке
- Но даже
ping 192.168.0.1 (the gateway's ip)
терпит неудачу
- Но даже
Программный стек на шлюзе / маршрутизаторе:
- системно-сетевой (для настройки подключения интерфейсов и шлюза ISP)
- Shorewall (для межсетевого экрана и роутера)
- несвязанный (для кеширования / перенаправления DNS-сервера)
- dhcpd (4) (для DHCP-сервера)
- hostapd (для настройки точки доступа Wi-Fi)
Физические интерфейсы на шлюзе / маршрутизаторе:
- интерфейс WAN / Internet (динамические адреса от провайдера по DHCP):
## from 'ip address show'
4: enp0s20u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether <REDACTED MAC> brd ff:ff:ff:ff:ff:ff
inet <REDACTED IP> brd 255.255.255.255 scope global dynamic noprefixroute enp0s20u1
valid_lft 9497sec preferred_lft 7239sec
inet6 <REDACTED IP> scope global dynamic noprefixroute
valid_lft 25472sec preferred_lft 25472sec
inet6 <REDACTED IP> scope link
valid_lft forever preferred_lft forever
## /etc/systemd/network/enp0s20u1.network
[Match]
Name=enp0s20u1
[Network]
#IPv6AcceptRA=0
#DNSDefaultRoute=1
DHCP=ipv4
DNSSEC=allow-downgrade
DNS=127.0.0.1
[Route]
GatewayOnLink=1
[DHCP]
RouteMetric=1000
[DHCPv4]
UseDNS=0
[DHCPv6]
UseDNS=0
- LAN / проводной интерфейс (статический IP и «основной» серверный интерфейс):
## from 'ip address show'
#
2: ens1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether <REDACTED MAC> brd ff:ff:ff:ff:ff:ff
altname enp2s0
inet 192.168.0.1/23 brd 192.168.1.255 scope global ens1
valid_lft forever preferred_lft forever
inet6 <REDACTED IPV6 ADRESS> scope link
valid_lft forever preferred_lft forever
## /etc/systemd/network/ens1.network
#
[Match]
Name=ens1
[Network]
Address=192.168.0.1/23
UseDNS=0
DHCP=0
- интерфейс WIFI (AP) (как точка доступа WPA (2) -PSK):
## from 'ip address show'
#
3: wlp0s20u2u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether <REDACTED MAC> brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/23 brd 192.168.1.255 scope global wlp0s20u2u1
valid_lft forever preferred_lft forever
inet6 <REDACTED IPV6 ADDRESS> scope link
valid_lft forever preferred_lft forever```
## /etc/systemd/network/wlp0s20u2u1.network
#
[Match]
Name=wlp0s20u2u1
[Network]
Address=192.168.1.1/23
UseDNS=0
DHCP=0
Конфиги Shorewall:
## /etc/shorewall/interfaces
#
internet NET_IF dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0,physical=enp0s20u1
lokal LOCAL_IF dhcp,tcpflags,nosmurfs,routefilter,logmartians,physical=ens1
lokal WIFI_IF dhcp,tcpflags,nosmurfs,routefilter,logmartians,physical=wlp0s20u2u1
docker docker0 bridge
## /etc/shorewall/zones
#
fw firewall
internet ipv4
lokal ipv4
docker ipv4
## /etc/shorewall/snat
#
MASQUERADE 192.168.0.0/23 NET_IF
MASQUERADE 192.168.1.0/23 NET_IF
## from /etc/shorewall/rules
#
Invalid(DROP) internet all tcp
# allow 'lokal' to access dhcpd
ACCEPT lokal $FW udp 67:68
#allow DNS
DNS(ACCEPT) $FW internet
DNS(ACCEPT) lokal $FW
# allow 'lokal' to ssh into to gateway
ACCEPT lokal $FW tcp 2222
# ping stuff
Ping(ACCEPT) lokal $FW
Ping(DROP) internet $FW
ACCEPT $FW lokal icmp
ACCEPT $FW internet icmp
#just some http(/s) stuff
ACCEPT internet $FW tcp 80,443
ACCEPT lokal $FW tcp 8090,8443
ACCEPT internet $FW tcp 8090,8443
Конфигурация DHCPD:
## /etc/dhcpd.conf
#
subnet 192.168.0.0 netmask 255.255.254.0
{
option subnet-mask 255.255.254.0;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
range 192.168.0.100 192.168.0.254;
}
subnet 127.0.0.0 netmask 255.0.0.0
{
}
Конфигурация HOSTAPD:
## /etc/hostapd/hostapd.conf
#
interface=wlp0s20u2u1
# "g" simply means 2.4GHz band
hw_mode=g
# the channel to use
channel=10
# limit the frequencies used to those allowed in the country
ieee80211d=1
# the country code
country_code=NO
# 802.11n support
ieee80211n=1
# QoS support, also required for full speed on 802.11n/ac/ax
wmm_enabled=1
# the name of the AP
ssid=<REDACTED SSID>
# 1=wpa, 2=wep, 3=both
auth_algs=1
# WPA2 only
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=<REDACTED PSK PASSWORD>
Некоторые (возможно) соответствующие примечания:
- https://shorewall.org/two-interface.htm#Wireless
- https://wiki.archlinux.org/title/Shorewall
- https://bbs.archlinux.org/viewtopic.php?pid=821090#p821090
- https://shorewall.org/manpages/shorewall-snat.html
Буду рад предоставить любую другую потенциально полезную информацию по запросу в комментариях.