내 Raspberry Pi에 대한 브리지를 설정하는 데 문제가 있습니다.
내 설정은 다음과 같습니다.
Fedora 27 워크스테이션을 실행하는 노트북이 있고 이는 wifi
Raspberry Pi Zero W 컴퓨터를 통해 usb
( 외부 전원 없음, 이더넷 없음, 아무것도 없음) 내 노트북에 연결됩니다. Stretch Lite 이미지를 내 PI에 플래시하고 여기에서 설치했습니다.usb
P4wnP1
https://github.com/mame82/P4wnP1P4wnP1
내 pi에는 설치하기 전에 임의의 주소가 있었기 169.254.xxx.xxx
때문에 ssh
pi에 들어가기 위해 USB 이더넷 인터페이스의 IP를 올바른 서브넷으로 변경했습니다. 잠시 후 파이를 온라인으로 전환하고 git을 다운로드하여 저장소를 복제할 수 있는 올바른 설정을 찾았습니다.
pi를 실행 install.sh
하고 다시 시작한 후에 pi는 고정 IP 주소를 갖게 되었습니다 172.16.0.1
. 나는 동일한 방법을 시도하여 온라인에 접속하고, 인터페이스의 IP를 변경하고, SSH를 통해 pi에 연결하고, Fedora 시스템용 게이트웨이를 설정했습니다.
하지만 파이를 온라인으로 얻을 수는 없습니다.
network manager
여기서는 "다른 컴퓨터와 연결 공유"를 활성화 하고 여러 가지를 시도했지만 iptables
제대로 작동하지 못했다는 점을 언급해야 할 것 같습니다 .
나는 지난 3일 동안 그것을 알아내려고 노력했지만 성공하지 못했습니다.
이것은 Fedora의 ifconfig입니다.
$ ifconfig
enp0s20f0u6i1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.0.2 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::f7f7:80c:8a15:5771 prefixlen 64 scopeid 0x20<link>
ether ee:98:9b:bc:37:ab txqueuelen 1000 (Ethernet)
RX packets 2687 bytes 186674 (182.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1648 bytes 176862 (172.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s31f6: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether c8:5b:76:6b:e4:90 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xf1200000-f1220000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1982 bytes 177290 (173.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1982 bytes 177290 (173.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:08:e4:d3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.106 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::ebcf:d3b1:5a74:185e prefixlen 64 scopeid 0x20<link>
ether e4:a7:a0:99:2e:8d txqueuelen 1000 (Ethernet)
RX packets 135496 bytes 72791497 (69.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 51579 bytes 21450089 (20.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
여기서 인터페이스는 enp0s20f06i3
pi에 연결된 인터페이스입니다. IP 주소를 변경하기 전에는 하나의 주소가 있었고 10.46.0.1
재부팅 후에도 동일한 주소입니다.
route -n
내 파이 에서
pi@MAME82-P4WNP1:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.0.2 0.0.0.0 UG 0 0 0 usb0
172.16.0.0 0.0.0.0 255.255.255.252 U 0 0 0 usb0
172.24.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
그리고 내 파이의 ifconfig
pi@MAME82-P4WNP1:~ $ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.0.1 netmask 255.255.255.252 broadcast 172.16.0.3
inet6 fe80::cc4b:62ff:fe84:7df0 prefixlen 64 scopeid 0x20<link>
ether ce:4b:62:84:7d:f0 txqueuelen 1000 (Ethernet)
RX packets 1959 bytes 182340 (178.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3197 bytes 269463 (263.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.24.0.1 netmask 255.255.255.0 broadcast 172.24.0.255
inet6 fe80::ba27:ebff:fe5e:ceb7 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:5e:ce:b7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1404 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
route -n
내 페도라 에
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 600 0 0 wlp4s0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 enp0s20f0u6i1
192.168.2.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
resolv.conf
내 파이에
pi@MAME82-P4WNP1:~ $ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.46.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
/etc/network/interfaces
내 파이 에
pi@MAME82-P4WNP1:~ $ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
dns-nameservers 8.8.8.8 8.8.4.4
auto usb0
iface usb0 inet manual
auto usb1
iface usb1 inet manual
마지막으로 나는 iptables
페도라를 착용하고 있는데 문제는 다음과 같습니다.
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 10.42.0.0/24 state RELATED,ESTABLISHED
ACCEPT all -- 10.42.0.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
FORWARD_direct all -- anywhere anywhere
FORWARD_IN_ZONES_SOURCE all -- anywhere anywhere
FORWARD_IN_ZONES all -- anywhere anywhere
FORWARD_OUT_ZONES_SOURCE all -- anywhere anywhere
FORWARD_OUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
OUTPUT_direct all -- anywhere anywhere
Chain FORWARD_IN_ZONES (1 references)
target prot opt source destination
FWDI_FedoraWorkstation all -- anywhere anywhere [goto]
FWDI_FedoraWorkstation all -- anywhere anywhere [goto]
FWDI_FedoraWorkstation all -- anywhere anywhere [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_OUT_ZONES (1 references)
target prot opt source destination
FWDO_FedoraWorkstation all -- anywhere anywhere [goto]
FWDO_FedoraWorkstation all -- anywhere anywhere [goto]
FWDO_FedoraWorkstation all -- anywhere anywhere [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_direct (1 references)
target prot opt source destination
Chain FWDI_FedoraWorkstation (3 references)
target prot opt source destination
FWDI_FedoraWorkstation_log all -- anywhere anywhere
FWDI_FedoraWorkstation_deny all -- anywhere anywhere
FWDI_FedoraWorkstation_allow all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
Chain FWDI_FedoraWorkstation_allow (1 references)
target prot opt source destination
Chain FWDI_FedoraWorkstation_deny (1 references)
target prot opt source destination
Chain FWDI_FedoraWorkstation_log (1 references)
target prot opt source destination
Chain FWDO_FedoraWorkstation (3 references)
target prot opt source destination
FWDO_FedoraWorkstation_log all -- anywhere anywhere
FWDO_FedoraWorkstation_deny all -- anywhere anywhere
FWDO_FedoraWorkstation_allow all -- anywhere anywhere
Chain FWDO_FedoraWorkstation_allow (1 references)
target prot opt source destination
Chain FWDO_FedoraWorkstation_deny (1 references)
target prot opt source destination
Chain FWDO_FedoraWorkstation_log (1 references)
target prot opt source destination
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_FedoraWorkstation all -- anywhere anywhere [goto]
IN_FedoraWorkstation all -- anywhere anywhere [goto]
IN_FedoraWorkstation all -- anywhere anywhere [goto]
Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain INPUT_direct (1 references)
target prot opt source destination
Chain IN_FedoraWorkstation (3 references)
target prot opt source destination
IN_FedoraWorkstation_log all -- anywhere anywhere
IN_FedoraWorkstation_deny all -- anywhere anywhere
IN_FedoraWorkstation_allow all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
Chain IN_FedoraWorkstation_allow (1 references)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:netbios-ns ctstate NEW
ACCEPT udp -- anywhere anywhere udp dpt:netbios-dgm ctstate NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ctstate NEW
ACCEPT udp -- anywhere anywhere udp dpts:blackjack:65535 ctstate NEW
ACCEPT tcp -- anywhere anywhere tcp dpts:blackjack:65535 ctstate NEW
Chain IN_FedoraWorkstation_deny (1 references)
target prot opt source destination
Chain IN_FedoraWorkstation_log (1 references)
target prot opt source destination
Chain OUTPUT_direct (1 references)
target prot opt source destination
올바른 항목을 추가해야 할 것 같은데 알 수 없어서 많은 포럼을 검색해 보았습니다. 네트워크 항목을
변경하는 방법이 있습니까 ? 내 인터페이스에는 이전에 해당 IP가 있었으므로 규칙에서 IP를 바꿀 수 있으면 끝입니다. 그렇죠? 10.46.0.0/24
172.16.0.0/24
나는 나름대로의 규칙을 설정하려고 노력했지만 그에 따라 규칙을 설정할 sudo iptables -t nat -A POSTROUTING -o wlp4s0 -j MASQUERADE
수는 없습니다 .FORWARD
답변1
요약:
Pi를 사용하려면 Fedora가 트래픽을 인터넷으로 전달해야 합니다.
PI
네트워크 카드 1개(우리가 관심을 갖고 있는 카드) 이름은 다음과 같습니다.
usb0 - Fedora에 연결합니다.
페도라:
인터넷에 연결되었습니다.
네트워크 카드 2개(우리가 관심을 갖고 있는) 이름은 다음과 같습니다.
wlp4s0 - 무선 네트워크
enp0s20f0u6i1 -- 파이에 연결합니다.
삶을 더 쉽게 만들려면 예측 가능한 네트워크 인터페이스 이름을 중단하는 것이 좋습니다. 우리는 네트워크 카드 이름을 사용하고 싶고 그 이름이 변경되는 것을 원하지 않습니다.
1 단계: 커널 명령줄에 "net.ifnames=0"을 추가하여 systemd의 예측 가능한 네트워크 인터페이스 이름을 중지합니다.
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
이제 grub을 업데이트하십시오.
sudo grub-mkconfig -o /boot/grub/grub.cfg
노트:
net.ifnames=0 외에 커널 명령줄에 "biosdevname=0" 값이 추가된 것을 보았습니다. 내 설정에는 필요하지 않습니다.
2 단계:
새 규칙 파일을 생성하여 udev 규칙을 사용하여 새 이름을 할당합니다.
sudo vi /etc/udev/rules.d/10-myCustom-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:f3:79:59", KERNEL=="eth*", NAME="test0"
~ 해야 하다줄을 ATTR{address}=="08:00:27:f3:79:59"
다음으로 변경하십시오.당신의MAC 주소.
NAME="test0"
네트워크 카드에 부여할 이름으로 변경합니다 .
노트:
ATTR{dev_id}=="0x0" and ATTR{type}=="1"
내 Ubuntu 14 템플릿에서 제거되었습니다.
KERNEL=="eth*"
어떤 사람들은 전체 줄을 삭제하거나 무시하라고 말합니다 . 내 설정에서는 그렇지 않습니다.
저처럼 이 단계 전에 재부팅하다가 MAC 주소를 "잃어버린" 경우, config에서 해당 주소를 표시하지 않으면 /sys/class/net/assignedName/address
.
참고: 이 시스템은 이름을 로 변경했습니다 eth0
.cat /sys/class/net/eth0/address
3단계:
새 인터페이스 이름에 주소 할당
sudo vi /etc/network/interfaces
auto test0
iface test0 inet static
address 192.168.2.202 -- use your address
netmask 255.255.255.0 -- use your address
and what other entries your system requires.
4단계:
재부팅(대부분의 경우 더 쉬움)
이제 이것은 네트워크 카드에 정적 이름을 부여합니다.
Fedora에 iptable 규칙만 추가하면 되므로 Pi에서는 이 작업을 수행할 필요가 없습니다.
가정:
Fedora와 Pi에는 모두 기본 라우팅 테이블이 있으며 iptable 규칙은 없습니다.
노트:
우리는 개인 IP 주소를 공개가 아닌 비공개로 유지하고 싶습니다.
RFC1918 name IP address range largest CIDR block (subnet mask)
24-bit block 10.0.0.0 – 10.255.255.255 10.0.0.0/8 (255.0.0.0)
20-bit block 172.16.0.0 – 172.31.255.255 172.16.0.0/12 (255.240.0.0)
16-bit block 192.168.0.0 – 192.168.255.255 192.168.0.0/16 (255.255.0.0)
PI:
IP 주소 할당USB0
sudo vi /etc/network/interfaces
auto usb0
iface usb0 inet static
address 172.16.0.1
netmask 255.240.0.0
add any other values needed.
페도라:
IPv4 전달 활성화
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
test0에 IP 주소를 할당합니다(위에서 네트워크 카드 이름을 변경한 것을 기억하세요).
sudo vi /etc/network/interfaces
# This connects to the Pi
auto test0
iface test0 inet static
address 172.16.0.2
netmask 255.240.0.0
add any other values needed.
# This is the internet connection
auto wlp4s0
iface wlp4s0 inet static
address 192.168.2.106
netmask 255.255.255.255
add any other values needed like
gateway a.b.c.d
dns-nameservers 8.8.8.8 8.8.4.4
wlp4s0 주소가 DHCP에 의해 할당된 경우 다음과 유사합니다.
인터넷 연결입니다
auto wlp4s0
iface wlp4s0 inet dhcp
test0에서 wlp4s0으로 패킷을 전달하고 로컬 서브넷 주소 래퍼를 사용하여 패킷을 래핑하도록 iptable 규칙을 설정합니다. 명령줄에 규칙을 입력합니다.
# this rule will forward all traffic from nic test0 to nic wlp4s0
sudo iptables -A FORWARD -i test0 -o wlp4s0 -j ACCEPT
# this rule will continue to forward any existing connections from test0 to wlp4so
sudo iptables -A FORWARD -i test0 -o wlp4s0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# this rule will wrap the packet with a local address so they do not get lost in transit.
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
노트:
방화벽 규칙이 활성화되어 있지 않습니다. 이는 제대로 작동하는 데 필요한 최소한의 사항입니다. 시스템을 보호하려면 추가 규칙을 추가하세요.
재부팅 후에도 iptable 규칙이 지속되도록 합니다.
Ubuntu16에서는 패키지 이름이 iptables-persistent
Fedora와 다를 수 있습니다.
sudo apt-get install iptables-persistent
현재 iptable 규칙 저장
iptables-save > /etc/iptables/rules.v4
페도라를 다시 시작하십시오.
확인하다:
IP 주소.
iptable 규칙