独立WWANを使用してDebianでWiFiとEthernetを接続する

独立WWANを使用してDebianでWiFiとEthernetを接続する

同様の質問がすでにありますが、説明を理解できません。これが私が持っているものです:

+-----+     +--------------------+           +----------------------+          +---------------+
|     |     | 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システムを表します。)


これは現在の親チャートを生成する Debian ボックスの設定ファイルです。問題は、2番目のWiFiアダプターを接続した後にそれを修正して2番目のグラフを作成し、2つのアダプターが役割を変更しないようにする方法です。 (現在の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が最新のセキュリティパッチを受け取るために週に1回自動的に更新して再起動するようにクローンジョブを設定しました。私はシステムにいる人が何をするのかわかりませんが(少なくとも「コードを切り取る」)ことを知りたくありません。また、セキュリティ上の理由からSSHを無効にし、管理PC上のUSB UARTと共にシリアルコンソールを使用しました。

残りの唯一のことは、UPSをオフにするようにGPIOを設定することです。これは、UPSにはUSBはありませんが、非UPS電源に追加の5V「ウォールカマキリ」が接続されているためです。直列抵抗は(希望的に)損傷を防ぎます。実際には、Piの+5VとGPIOピン(まったくGNDなし)の間に接続されているため、「電源が供給されていない」状態はPiの+3.3Vに浮かんで維持されなければならず、全体に1.7Vが残ります。エネルギーが供給されていない壁のカマキリ。 3Vの壁のコンセントを使用する方が良いでしょうが、コンセントはありません。

おすすめ記事