wlan0의 Raspberry Pi를 통해 연결하는 WiFi 액세스 포인트가 있습니다. eth0에 주소를 제공하기 위해 Raspberry Pi에 DHCP 서버를 설정했습니다. eth0에 연결된 오래된 라우터 설정이 있었는데 자체 액세스 포인트를 전송하고 몇 가지 다른 작업을 수행했습니다.
다음과 같이 보입니다.
[main wifi AP] <-wlan0-> [raspberry pi] <- pi's eth0 -> (router/client)
DHCP 서버에서 제공한 주소는 괜찮지만 eth0에서 wlan0으로 트래픽을 라우팅하는 데 문제가 있습니다(이것이 맞는지 확실하지 않음). 아무 문제 없이 ssh로 파이에 접속할 수도 있습니다.
이 작업을 시도하기 위해 iptables의 몇 가지 규칙을 사용하고 있지만 전혀 작동하지 않는 것 같습니다. 로컬 네트워크 외부의 주소에는 연결할 수 없습니다. 예를 들어, Pi와 노트북 사이에 사용하는 라우터에 관계없이 메인 AP가 DHCP를 통해 Raspberry Pi에 제공하는 DNS 서버에 연결할 수 없습니다.
덤프는 다음과 같습니다 iptables-save
.
# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*nat
:PREROUTING ACCEPT [1:32]
:INPUT ACCEPT [1:32]
:OUTPUT ACCEPT [7:432]
:POSTROUTING ACCEPT [5:336]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Feb 24 01:11:24 2016
# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*filter
:INPUT ACCEPT [3:140]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:308]
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
COMMIT
# Completed on Wed Feb 24 01:11:24 2016
로컬 네트워크 외부에서 연결되지 않는 이유를 아는 사람이 있습니까?
답변1
소개하다
완전하고 기능적인 예제를 만들기에는 정보가 충분하지 않기 때문에 몇 가지 가정을 하겠지만 변경 사항은 사소해야 합니다.
가설
- RaspberryPi의 wlan0에 연결된 네트워크는 192.168.1.0/24입니다.
- RaspberryPi의 eth0에 연결된 네트워크는 192.168.2.0/24입니다.
- RaspberryPi의 wlan0 장치에는 IP 주소 192.168.1.1 및 eth0 192.168.2.1이 할당되었습니다.
프로그램
- RaspberryPi에서 모든 iptables 항목을 제거합니다.
RaspberryPi에서 IPv4 전달을 허용합니다.
# Execute as "root" echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf sysctl -p
RaspberryPi의 wlan0 네트워크에 연결된 장치에 이를 유선 네트워크의 게이트웨이로 사용하도록 지시합니다. 이렇게 하면 패킷이 192.168.1.0/24에서 192.168.2.0/24로 이동할 수 있지만 이러한 패킷에 대한 응답은 반환되지 않습니다(다음 지점에서 설명).
무선 네트워크에 Linux 컴퓨터가 있는 경우 구성을 테스트하는 데 도움이 되는 임시 경로를 추가할 수 있지만 재부팅 및 기타 이벤트가 지속되지는 않습니다(Linux 배포판에 따라 생성하려면 다른 파일을 편집해야 할 수도 있음). 이 구성은 지속적으로). 성공적인 테스트를 위해서는 다음 지점까지 기다려야 한다는 점을 기억하세요. 간단히 말해서 다음을 실행하십시오.
ip route replace 192.168.2.0/24 via 192.168.1.1
RaspberryPi의 eth0 네트워크에 연결된 장치에 이를 무선 네트워크의 게이트웨이로 사용하도록 지시합니다.
유선 네트워크에 Linux 컴퓨터가 있는 경우 임시 경로를 추가할 수 있습니다. 이는 구성을 완전히 테스트하는 데 도움이 되지만 재부팅 및 기타 이벤트가 지속되지는 않습니다(Linux 배포판에 따라 다른 파일을 편집하여 설정 가능). 이 구성은 지속적으로). 구현하다:
ip route replace 192.168.1.0/24 via 192.168.2.1
RaspberryPi를 유선 네트워크의 기본 게이트웨이로 변경하려면 위 명령을 다음과 같이 변경해야 합니다.
ip route replace default via 192.168.2.1
또한 이 새로운 기본 게이트웨이를 자동으로 구성할 수도 있습니다. RaspberryPi에서 ISC DHCP 서버를 사용하여 유선 네트워크를 제공하는 경우 "dhcp3.conf" 구성 파일의 시작 부분에 다음 줄을 추가한 다음 기본 게이트웨이 구성이 DHCP에서 제공되도록 서버를 다시 시작할 수 있습니다. :
option routers 192.168.2.1
답변2
나는 Raspberry Pi로 당신이 설명하는 거의 모든 작업을 수행했습니다. 크로스오버 케이블을 사용하여 노트북의 이더넷 포트에 직접 연결했습니다. 나는 이것이 중요하다고 생각한다. 구성에 어떤 문제가 있는지 잘 모르겠지만 뭔가 있는 것 같습니다. 내 노트북에서 다음 스크립트를 실행하고 있습니다.
#!/bin/bash
/usr/bin/ip link set dev enp9s0 up
/usr/bin/ip addr add 172.16.1.1/24 dev enp9s0
sleep 10
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
iptables -A FORWARD -o enp9s0 -i wlp0s26f7u3 -s 172.16.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
dhcpd -cf /etc/dhcpd.enp9s0.conf enp9s0
enp9s0
는 이더넷 포트의 이름이고 wlp0s26f7u3
노트북에 있는 USB 무선 카드의 이름입니다.
파일은 /etc/dhcpd.enp9s0.conf
다음과 같습니다.
option domain-name "wlan";
option domain-name-servers 10.0.0.3;
option routers 172.16.1.1;
option ntp-servers 10.0.0.3;
default-lease-time 14440;
ddns-update-style none;
deny bootp;
shared-network intranet {
subnet 172.16.1.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
pool { range 172.16.1.50 172.16.1.200; }
}
}
그런 다음 Raspberry Pi의 전원을 켰습니다. 몇 초 후에 이를 사용하여 arp -a
하드웨어 주소와 IP 주소(아마도 172.16.1.50)를 확인한 다음 ssh
들어갈 수 있습니다.