이더넷 케이블을 통해 PC에 연결된 라즈베리 파이에서 인터넷이 제대로 작동하도록 하려면 어떻게 해야 합니까?

이더넷 케이블을 통해 PC에 연결된 라즈베리 파이에서 인터넷이 제대로 작동하도록 하려면 어떻게 해야 합니까?

다음 설정을 시도하고 있습니다.

라즈베리 파이(eth0) <--> (eth0) 노트북(wlan0) <--> 인터넷

(라즈베리용 Raspbian이 있습니다.) 왼쪽 LAN은 주소 192.168.0.*을 사용합니다.

현재 내 노트북에서 다음 스크립트를 실행하고 있습니다.

ifconfig eth0 up
ifconfig eth0 inet 192.168.0.1
route | grep "192\.168\.0\.0" || \
 route add -net 192.168.0.0/16 dev eth0

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F; iptables -t nat -F
iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -o wlan0 -j MASQUERADE

killall -9 udhcpd
udhcpd -f

Raspberry의 Raspbian(거의 기본)이 DHCP 서버를 얻을 수 있기를 바랍니다. (최종 구성에서 Raspberry는 헤드리스 설정이 됩니다.)

그러나 이것은 단지 작동합니다때때로. 또한 두 시스템 중 하나에서 다른 시스템으로 핑을 보낼 때 Packet filtered응답을 받거나 전혀 응답을 받지 못하는 경우 도 자주 있습니다. (또한 노트북에서 내가 추가한 경로를 삭제하는 경우도 있는 것 같습니다.)

내가 무엇을 잊었나요?

답변1

그것은 당신이하고 싶은 일이 아닙니다. 두 개의 서로 다른 네트워크 인터페이스에서 IP 범위가 겹칠 수 없습니다. 발견한 대로 이는 패킷을 전달하는 경우도 있고 그렇지 않은 경우도 있습니다. 그리고 DHCP 요청은 단일 LAN 세그먼트로 제한된 브로드캐스트이므로 전달되지 않습니다.

PC가 WLAN 대신 LAN을 통해 인터넷에 연결된 경우 두 ethX인터페이스만 브리지하면 됩니다. 그러나 WLAN이 4주소 모드가 아니면 WLAN 인터페이스를 LAN에 브리지할 수 없습니다. 왜냐하면 일반적인 3주소 WLAN 패킷은 PC를 "중간" 수신기로 지정하거나 RaspPi를 "최종" 수신기로 사용합니다.

따라서 올바른 방법은 두 인터페이스 모두에 서로 다른 IP 범위(예: 192.168.1.*/24(또는 라우터가 제공하는 모든 것) 및 wlan0노트북의 192.168.3.1/24(또는 무엇이든))를 할당하는 것입니다. eth0그런 다음 노트북에서 DHCP 서버를 실행하여 eth0RaspPi에 192.168.55.*/24 주소를 제어하고 제공합니다. 마지막으로 전달 및 가장을 활성화합니다.

내 PC에서 올바른 dhcpd 구성 파일과 함께 다음 스크립트를 사용하고 있습니다.

#!/bin/bash

# pass eth0 through wlan0, using nat

modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat  

EXTIF="wlan0"
INTIF="eth0"

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

ip link set eth0 down
ip addr flush dev eth0
ip addr add 192.168.3.1/24 dev eth0
ip link set eth0 up

/etc/init.d/isc-dhcp-server start

(systemd를 사용하는 경우 마지막 줄을 systemd 명령으로 바꿔 DHCP 서버를 시작합니다.)

관련 정보