Мост Wi-Fi и Ethernet в Debian с отдельной WWAN

В дополнение к тому, что сказал Кусалананда, вы также можете использовать egrep, если вам не хочется иметь дело с флагом -E.

0
14.09.2021, 17:11
1 ответ

Как и многое другое, это оказалось XY-задачей .

Я хотел этого, как минимальное изменение того, что у меня уже было:

+-----+     +--------------------+           +---------------------------+           +---------------+
|     |     | ISP's Modem/Router |           | Debian Box with           | <--GbE--- |               |
| ISP | <-- |  (opposite corner  | <--WiFi-- | TWO USB WiFi adapters and | <--GbE--- | Local Network |
|     |     |    of the house)   |           | 8-port GbE switch         | <--WiFi-- |               |
+-----+     +--------------------+           +---------------------------+           +---------------+

Но в итоге я остановился на этом, который так же хорош функционально, и часть, которую я не мог понять, помещается в -коробку -с полки, предназначенную именно для этого :

.
+-----+     +--------------------+           +-------------------------------+               +---------------------------+           +---------------+
|     |     | ISP's Modem/Router |           | Raspberry Pi Model A with     |               | Off-the-Shelf WiFi Router | <--GbE--- |               |
| ISP | <-- |  (opposite corner  | <--WiFi-- | USB 2.0 Dock (includes Enet)  | <--100baseT-- | with different subnet     | <--GbE--- | Local Network |
|     |     |    of the house)   |           | and USB WiFi adapter          |               | from ISP's network        | <--WiFi-- |               |
+-----+     +--------------------+           +-------------------------------+               +---------------------------+           +---------------+

У меня были Pi A, Dock, CanaKit ("Pi Official"? )USB-адаптер Wi-Fi и маршрутизатор все равно просто лежал без дела, так что он был фактически бесплатным. Pi даже питается от док-станции, так что это тоже хорошо. Мне было особенно интересно, что я собираюсь делать с маломощным Pi по сегодняшним меркам, но, похоже, он хорошо справляется с моим медленным дешевым интернетом.

И теперь у меня есть оригинальный Debian Box (Banana Pi R1, или «маршрутизатор, который абсолютно не подходит» )не используется и доступен для чего-то другого.

После нескольких безуспешных попыток превратить RasPi в собственный маршрутизатор с NAT, DCHP и т. д., просто для того, чтобы обслуживать удаленный -полочный маршрутизатор -в качестве единственного клиента(много-много устаревших руководств. сделать именно это, это не работает, потому что RPi OS теперь работает по-другому; но тут нечего сказать, даже даты публикации)я не решился попробовать настоящий бридж. Этот скрипт "просто работал" для того,(скопированного дословно с этого сайта):

#!/usr/bin/env bash

set -e

[ $EUID -ne 0 ] && echo "run as root" >&2 && exit 1

##########################################################
# You should not need to update anything below this line #
##########################################################

# parprouted  - Proxy ARP IP bridging daemon
# dhcp-helper - DHCP/BOOTP relay agent

apt update && apt install -y parprouted dhcp-helper

systemctl stop dhcp-helper
systemctl enable dhcp-helper

# Enable ipv4 forwarding.
sed -i'' s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/ /etc/sysctl.conf

# Service configuration for standard WiFi connection. Connectivity will
# be lost if the username and password are incorrect.
systemctl restart wpa_supplicant.service

# Enable IP forwarding for wlan0 if it's not already enabled.
grep '^option ip-forwarding 1$' /etc/dhcpcd.conf || printf "option ip-forwarding 1\n" >> /etc/dhcpcd.conf

# Disable dhcpcd control of eth0.
grep '^denyinterfaces eth0$' /etc/dhcpcd.conf || printf "denyinterfaces eth0\n" >> /etc/dhcpcd.conf

# Configure dhcp-helper.
cat > /etc/default/dhcp-helper <<EOF
DHCPHELPER_OPTS="-b wlan0"
EOF

# Enable avahi reflector if it's not already enabled.
sed -i'' 's/#enable-reflector=no/enable-reflector=yes/' /etc/avahi/avahi-daemon.conf
grep '^enable-reflector=yes$' /etc/avahi/avahi-daemon.conf || {
  printf "something went wrong...\n\n"
  printf "Manually set 'enable-reflector=yes in /etc/avahi/avahi-daemon.conf'\n"
}

# I have to admit, I do not understand ARP and IP forwarding enough to explain
# exactly what is happening here. I am building off the work of others. In short
# this is a service to forward traffic from WiFi to Ethernet.
cat <<'EOF' >/usr/lib/systemd/system/parprouted.service
[Unit]
Description=proxy arp routing service
Documentation=https://raspberrypi.stackexchange.com/q/88954/79866
Requires=sys-subsystem-net-devices-wlan0.device dhcpcd.service
After=sys-subsystem-net-devices-wlan0.device dhcpcd.service

[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
# clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
ExecStartPre=/bin/bash -c '/sbin/ip addr add $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/sbin/ip link set dev eth0 up
ExecStartPre=/sbin/ip link set wlan0 promisc on
ExecStart=-/usr/sbin/parprouted eth0 wlan0
ExecStopPost=/sbin/ip link set wlan0 promisc off
ExecStopPost=/sbin/ip link set dev eth0 down
ExecStopPost=/bin/bash -c '/sbin/ip addr del $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'

[Install]
WantedBy=wpa_supplicant.service
EOF

systemctl daemon-reload
systemctl enable parprouted
systemctl start parprouted dhcp-helper

Выполните обычную настройку нового Pi, включая подключение к восходящему Wi-Fi и полное обновление, затем запустите этот скрипт с правами root/sudo и перезагрузите компьютер. Сделанный!

Я почти ничего не знаю, что это делает, как и почему; только то, что это «просто работает».

Внешний -локальный маршрутизатор -полки теперь ведет себя так, как будто его WAN/интернет-порт подключен непосредственно к WiFi интернет-провайдера (Pi между ними полностью прозрачен ), а затем он вот то, что он предназначен для работы в качестве WiFi-маршрутизатора.Я предполагаю, что маршрутизатор провайдера видит 2 клиентов в WiFi -Pi и мой маршрутизатор -, но я не чувствовал необходимости проверять.


Немного не по теме -, но важно для тех, кто хочет воспроизвести мою настройку:

Я также настроил задание cron, чтобы Pi автоматически обновлялся и перезагружался раз в неделю, просто чтобы получать последние исправления безопасности. Я не знаю, что кто-то мог сделать в тот момент в системе ("перерезать шнур" там, как минимум ), но я бы тоже не хотел этого узнавать. Также в целях безопасности я оставил SSH отключенным и вместо этого использовал последовательную консоль с USB UART, который у меня также был на моем ПК для администрирования.

Единственное, что осталось сделать, это снова настроить мой GPIO -, запускающий ИБП -, так как этот ИБП не имеет USB, но у меня есть дополнительная 5-вольтовая «настенная -бородавка», подключенная к питание не -ИБП. Последовательный резистор (надеюсь )предотвратит повреждение, и на самом деле он подключается между + 5 В Pi и контактом GPIO (вообще без заземления ), так что «не питается» должно плавать до + Pi. 3,3 В и оставаться там, оставляя 1,7 В на незапитанной -стене -бородавке. Лучше было бы использовать бородавку 3V wall -, но у меня ее не было.

1
24.09.2021, 14:20

Теги

Похожие вопросы