비슷한 질문이 이미 있지만 설명을 이해할 수 없습니다. 이것이 내가 가진 것입니다:
+-----+ +--------------------+ +----------------------+ +---------------+
| | | ISP's Modem/Router | | Debian Box with | <--GbE-- | |
| ISP | <-- | (opposite corner | <--WiFi-- | USB WiFi adapter and | <--GbE-- | Local Network |
| | | of the house) | | 8-port GbE switch | <--GbE-- | |
+-----+ +--------------------+ +----------------------+ +---------------+
이러한 로컬 이더넷 케이블 중 일부는 약간 길어지고 있습니다.
이것이 내가 원하는거야:
+-----+ +--------------------+ +---------------------------+ +---------------+
| | | 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-- | |
+-----+ +--------------------+ +---------------------------+ +---------------+
본질적으로 저는 더 긴 전선을 동일한 로컬 네트워크의 WiFi로 교체했습니다. 전체적인 결과는 WAN 포트를 별도의 WiFi 어댑터로 전환하는 표준 WiFi 라우터와 같아야 합니다. 유선과 무선의 로컬 조합이 단일 네트워크처럼 작동하고 "라우터"를 일치시켜 무엇이든 연결할 수 있기 때문입니다. "SSID 및 비밀번호. (이 예에서 "라우터"는 ISP의 모뎀/라우터가 아닌 Debian 시스템을 나타냅니다.)
이것은 현재 상위 차트를 생성하는 데비안 상자의 구성 파일입니다. 문제는 두 번째 WiFi 어댑터를 연결한 후 이를 수정하여 두 번째 그래프를 생성하고 두 어댑터가 역할을 바꾸지 않도록 보장하는 방법입니다. (현재 ISP에 연결된 것은 AP 모드도 지원한다고 주장하지만 시도하면 충돌이 발생합니다. 그래서 현재 역할을 유지하고 새 역할이 새 AP 역할을 하게 하고 싶습니다.)
/etc/network/if-pre-up.d/swconfig
:
# Affects several other files:
# /etc/dnsmasq.conf
# /etc/network/interfaces
# /root/Scripts/Startup-Network.sh
#---------------------------#
# BPI-R1 VLAN configuration #
#---------------------------#
#
# This will create the following ethernet port:
# - eth0.101 = LAN (5 port switch)
ifconfig eth0 up
# The swconfig port number are:
# |2|1|0|4| |3|
# (looking at front of ports)
swconfig dev eth0 set reset 1
swconfig dev eth0 set enable_vlan 1
swconfig dev eth0 vlan 101 set ports '4 0 1 2 3 8t'
swconfig dev eth0 set apply 1
exit 0
/etc/network/interfaces
:
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
# eth0.x matches the 'vlan x set ports' line(s) in /etc/network/if-pre-up.d/swconfig
auto eth0.101
# dhcp configuration
#iface eth0.101 inet dhcp
# static ip configuration
iface eth0.101 inet static
address 192.168.50.1 # (not my actual IP, but you get the idea)
netmask 255.255.255.0
# gateway 192.168.50.1
auto wlan0
iface wlan0 inet dhcp
wpa-ssid <ISP's SSID>
wpa-psk <ISP's password>
/etc/dnsmasq.conf
완전히 주석 처리된 하단의 이 부분을 제외하고는 다음과 같습니다.
# eth0.x matches the 'vlan x set ports' line(s) in /etc/network/if-pre-up.d/swconfig
interface=eth0.101
# normal DHCP
dhcp-range=192.168.50.100,192.168.50.199,12h
# special, need to be found easily
# Static1 (by MAC address instead of hostname, so that a replacement can exist simultaneously for a while)
dhcp-host=12:34:56:78:9a:bc,192.168.50.25
# Static2 (by MAC address instead of hostname, so that a replacement can exist simultaneously for a while)
dhcp-host=34:56:78:9a:bc:de,192.168.50.35
# Static3 (by MAC address instead of hostname, so that a replacement can exist simultaneously for a while)
dhcp-host=56:78:9a:bc:de:f0,192.168.50.72
/root/Scripts/Startup-Network.sh
시작 시 실행되고 다음에서 시작됩니다 /etc/rc.local
.
# Match settings in /etc/network/interfaces
IFACE_WAN="wlan0"
IFACE_LAN="eth0.101"
# Actual work
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables --table nat --append POSTROUTING --out-interface $IFACE_WAN -j MASQUERADE
iptables --append FORWARD --in-interface $IFACE_LAN -j ACCEPT
답변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 공식"?) USB WiFi 어댑터와 라우터가 있으므로 실제로는 무료입니다. Pi는 도크를 통해 전원을 공급받기도 하므로 그것도 좋습니다. 오늘날의 기준으로 볼 때 성능이 부족한 Pi로 무엇을 할 것인지 구체적으로 궁금합니다. 하지만 인터넷이 느리고 저렴하기 때문에 여기서는 괜찮은 것 같습니다.
이제 나는 원래 Debian Box(Banana Pi R1 또는 "분명히 원하는 라우터가 아님")를 갖고 있으며 사용되지 않았으며 다른 목적으로 사용할 수 있습니다.
NAT 및 DCHP 등을 사용하여 RasPi를 자체 라우터로 전환하려는 시도가 여러 번 실패한 후 기성 라우터를 유일한 클라이언트로 사용합니다 (이 작업을 수행하는 오래된 튜토리얼이 많이 있지만 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
업스트림 WiFi에 연결하고 완전히 업데이트한 다음 스크립트를 root/sudo로 실행하고 재부팅하는 등 새 Pi의 일반적인 설정을 수행합니다. 완벽한!
나는 대부분 그것이 무엇을 하는지, 무엇을 하는지, 왜 하는지 모릅니다. 단지 "그냥 작동한다"는 것뿐입니다.
기성 로컬 라우터는 이제 마치 WAN/인터넷 포트가 ISP의 WiFi에 직접 연결된 것처럼 작동하며(가운데 Pi는 완전히 투명함) 거기에서 원래 설계된 기능을 수행하기 시작합니다. WiFi 라우터. ISP의 라우터가 Wi-Fi에서 Pi와 내 라우터라는 2개의 클라이언트를 본다고 생각하지만 확인할 필요는 없습니다.
주제에서 약간 벗어났지만 내 설정을 복제하려는 사람에게는 중요합니다.
또한 Pi가 최신 보안 패치를 받기 위해 일주일에 한 번씩 자동으로 업데이트하고 재부팅하도록 크론 작업을 설정했습니다. 나는 시스템에 있는 사람이 무엇을 할지 모르지만(적어도 "코드를 자르는") 것도 알고 싶지 않습니다. 또한 보안상의 이유로 SSH를 비활성화하고 관리 PC에 있는 USB UART와 함께 직렬 콘솔을 사용했습니다.
남은 유일한 일은 UPS를 다시 끄도록 GPIO를 설정하는 것입니다. UPS에는 USB가 없지만 비 UPS 전원 공급 장치에 추가 5V "벽 사마귀"가 연결되어 있기 때문입니다. 직렬 저항은 (희망적으로) 손상을 방지할 것입니다. 실제로 Pi의 +5V와 GPIO 핀(전혀 GND 없음) 사이에 연결되어 있으므로 "전원이 공급되지 않는" 상태는 Pi의 +3.3V로 플로팅되어 유지되어야 하며, 전체에 1.7V가 남습니다. 에너지가 공급되지 않은 벽 사마귀. 3V 벽면 콘센트를 사용하면 더 좋겠지만 콘센트가 없습니다.