私はRaspberry Pi Zero 2WをIoTハッカー/開発ブリッジとして構成しています。
主な目標は次のとおりです。
- ソフトウェアパッケージをダウンロードしたり、デバイスの一時的なワイヤレスネットワークに接続するために管理されているクライアントWLANデバイスを維持します。
- IoTデバイスへの接続を提供しますが、それを隔離するためにインターネットアクセスを必要としないワイヤレスネットワーク。
- 単一のUSBケーブルを介したUSBイーサネットガジェットモードによる電源+パイへのネットワーク接続
- pi/イーサネットガジェットで駆動される開発マシンでIoTデバイスと対話します。
私が今まで持っていること
1-2 回線経由で固定 IP で構成された USB イーサネットデバイス/etc/rc.local
ip addr add 10.20.20.1/24 dev usb0
ip link set dev usb0 up
2-APとマネージドネットワークがうまく統合されています。これはを使用してWi-Fiネットワークに接続することによって行われますnmcli device wifi connect <myhomenetwork> password <homenetworkpw>
。接続したら、udev ルールを使用して次のように 2 番目の仮想ワイヤレス インターフェイスを作成します。
#70-persistent-net.rule
#note phy0 mac *:87 and the new virtual dev mac *:89
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="d8:3a:dd:ba:6d:87", KERNEL=="phy0", \
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
RUN+="/bin/ip link set ap0 address d8:3a:dd:ba:6d:89"
これにより、次のnmcliコマンドを使用して設定するインターフェイスが提供されます。
#!/bin/bash
nmcli con delete dev_ap
nmcli con add type wifi ifname ap0 mode ap con-name dev_ap ssid Special_ssid autoconnect true
nmcli con modify dev_ap 802-11-wireless.band bg
nmcli con modify dev_ap 802-11-wireless.channel 3
nmcli con modify dev_ap 802-11-wireless.cloned-mac-address d8:3a:dd:ba:6d:89
nmcli con modify dev_ap ipv4.method shared ipv4.address 10.20.10.1/24
nmcli con modify dev_ap ipv4.never-default yes
nmcli con modify dev_ap ipv6.method disabled
nmcli con modify dev_ap wifi-sec.key-mgmt wpa-psk
nmcli con modify dev_ap wifi-sec.psk "awesomepassword"
nmcli con up dev_ap
3- IoTデバイスのスヌーピングを防止するファイアウォール
iptables -A FORWARD -i ap0 -o wlan0 -j DROP
私に何が含まれていますか?
これにより、期待通りに機能するWi-Fi接続、インターネットアクセスはありませんが、PyにアクセスできるDHCPアクセスポイント、開発コンピュータの新しいUSBイーサネットポートが作成されました。そのインターフェイスにある開発コンピュータの静的IPをサブネットのアドレスに設定し、SSHをpiに設定できます。
ip a レポート:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 62:f4:4e:bf:3c:56 brd ff:ff:ff:ff:ff:ff
inet 10.20.20.1/24 scope global usb0
valid_lft forever preferred_lft forever
inet6 fe80::60f4:4eff:febf:3c56/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether d8:3a:dd:ba:6d:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.145/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
valid_lft 5761sec preferred_lft 5761sec
inet6 fe80::1e9f:328e:dbe0:abda/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether d8:3a:dd:ba:6d:89 brd ff:ff:ff:ff:ff:ff permaddr d8:3a:dd:ba:6d:87
inet 10.20.10.1/24 brd 10.20.10.255 scope global noprefixroute ap0
valid_lft forever preferred_lft forever
私は何を見逃していますか?
現在、クライアントはap0
接続された開発システムに対してpingを実行できますが、usb0
開発システムはクライアントに対してpingを実行できませんap0
。
追加情報
出力は次のとおりですip route
。
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.145 metric 601
10.20.10.0/24 dev ap0 proto kernel scope link src 10.20.10.1 metric 600
10.20.20.0/24 dev usb0 proto kernel scope link src 10.20.20.1
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.145 metric 601
結果nft list ruleset
table ip nm-shared-ap0 {
chain nat_postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.20.10.0/24 ip daddr != 10.20.10.0/24 masquerade
}
chain filter_forward {
type filter hook forward priority filter; policy accept;
ip daddr 10.20.10.0/24 oifname "ap0" ct state { established, related } accept
ip saddr 10.20.10.0/24 iifname "ap0" accept
iifname "ap0" oifname "ap0" accept
iifname "ap0" reject
oifname "ap0" reject
}
}
table ip filter {
chain FORWARD {
type filter hook forward priority filter; policy accept;
iifname "ap0" oifname "wlan0" counter packets 11692 bytes 763264 drop
}
}
iftables-save -c
# Generated by iptables-save v1.8.9 (nf_tables) on Wed Jan 31 03:33:00 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
[11794:770312] -A FORWARD -i ap0 -o wlan0 -j DROP
COMMIT
# Completed on Wed Jan 31 03:33:00 2024
答え1
もちろんnftablesルールはそれ自体または外部の正しいソースのみを許可しますap0
(その後、追加で削除されます)。iptables-nft使用規則wlan0
)。
特にこの規則は次のとおりですfilter_forward
。
oifname "ap0" reject
もともと他の場所から始まったルーティングされたトラフィックが到着するのを防ぎますap0
。
nm-shared
スキーマによって、NetworkManagerの設定に応じて、次に始まるテーブル名が自動的に生成されますipv4.method shared
。
nmcli con modify dev_ap ipv4.method shared ipv4.address 10.20.10.1/24
いったん設置されると変調が許容される場合(今後これを防止するための条項があること)nftablesテーブルを制御するデーモン以外のものによってテーブルが変更された場合)このコマンドは次のように実行されます。根usb0
ユーザーは次のトラフィックをすぐに許可しますap0
。
nft insert rule ip nm-shared-ap0 filter_forward index 3 iifname usb0 oifname ap0 accept
これは、NetworkManagerが何らかの理由でルールを再作成すると復元されます(ただし、確立されたSSH接続など、すでに確立されている接続は引き続き機能できるはずです)。
より継続的な作業を実行するには、NetworkManager設定を変更する必要があります。 ~からこの機能はNetworkManagerブログに文書化されています。:
ファイアウォールモードとnftables
NetworkManagerは、共有プロファイルが有効になるとIPv4用のNATを有効にします。これまでは、
iptables
構成変装だけを呼び出すことができます。この新しいバージョンでは、同じ目的を達成するようにnftablesを設定することも可能です。[main].firewall-backend
新しいオプションでファイアウォールバックエンドを設定できます。networkmanager.conf。明示的な設定がない場合、存在しない限り、デフォルト/usr/sbin/nft
は「nftables」です/usr/sbin/iptables
。
これNetworkManager.conf
リンクは次のことを伝えます。
firewall-backend
共有モードマスカレーディングを設定するためのファイアウォールバックエンド。
iptables
、nftables
またはに設定しますnone
。それらはそれぞれ要件iptables
とアプリケーションです。nftables
iptables
nft
none
つまり、ユーザーがファイアウォールを直接管理したい場合は、ファイアウォール構成をスキップします。指定しないと自動的に検出されます。
この場合、最も簡単な方法はファイアウォールバックエンドの使用を無効にし、OPがここですでに行ったように必要に応じてルールを手動で実装することです。iptables、または使用nftables。 NetworkManagerのファイアウォールを無効にするには、ファイルを編集してそのブロック/etc/NetworkManager/NetworkManager.conf
の下にエントリを追加します[main]
(そのブロックと他のブロックにすでに存在する他のものを除く)。これは少なくとも次のように始まります。
[main]
firewall-backend=none
NetworkManagerを再起動(または再起動)します。
後でインターネットからのトラフィックが再び許可されると、プライマリルータが着信ap0
アドレスを認識しない可能性がありますap0
。この場合は、復元に使用できます。iptablesルールの交換nftablesNATルール:
iptables -t nat -I POSTROUTING -s 10.20.10.0/24 ! -d 10.20.10.0/24 -j MASQUERADE
そのようなトラフィックが許可されていなくても心配しないでください。