다음 설정을 시도하고 있습니다.
라즈베리 파이(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 서버를 실행하여 eth0
RaspPi에 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 서버를 시작합니다.)