route table 관련 질문 드립니다.
network device 2개를 사용하여 작업중 network routing이 되질 않아 질문 드립니다.
우선 구성은 아래와 같습니다.
1. station dev : USB network : USB0
2. WiFi dev : USB network(USB0) + ath0(WiFi)
3. station PC : WiFi
그림은 표시해 보면
station dev(USB0) --- (USB0)WiFi dev(ath0) -- AP -- (WiFi)station PC
station dev의 경우 dhcpc 를 통해 WiFi dev에서 IP를 할당 받습니다. (192.168.0.x)
WiFi dev(ath0)의 경우
- USB0 의 경우 192.168.0.2(Static) 으로 설정하고 dhcp-server를 통해 station dev에 IP 부여.
- ath0 의 경우 AP와 같은 network 대역의 static IP 192.168.10.132 을 부여.
station PC의 경우 AP dhcp 를 통해 IP 부여 (192.168.10.100)
여기서 문의 사항으로는
WiFi dev에서의 route 가 어떻게 되어야 USB0를 통해 들어온 패킷이 ath0로 갈 수 있느냐 하는 겁니다.
예를 들어 ..
station dev(USB0) : 192.168.0.100
WiFi dev(USB0) : 192.168,0.2, ath0 : 192.168.10.132
station PC : 192.168.10.100 이라고 할 경우
192.168.0.100 <-> 192.168.0.2 로의 ping은 됩니다.
192.168.10.132 <-> 192.168.10.100 로의 ping도 됩니다.
근데 192.168.0.100 <-> 192.168.10.100 으로의 ping은 안됩니다.
WiFi dev의 route는 아래와 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 usb0
192.168.10.0 * 255.255.255.0 U 0 0 0 ath0
default 192.168.10.1 0.0.0.0 UG 0 0 0 ath0
제가 무엇을 놓치고 있을 까요?
고수님들의 지식 공유 부탁드립니다.
미리 감사합니다.
station dev 와 station PC 의
station dev 와 station PC 의 라우팅 테이블을 보여주세요.
WiFi dev 가 중간에서 중계를 못해주고 있는 것인지, 아예 패킷을 받지도 못 한 것인지 명확하지 않습니다.
station dev 의 route table은
station dev 의 route table은 다음과 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 usb1
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 l4tbr0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 usb1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 usb1
192.168.55.0 0.0.0.0 255.255.255.0 U 0 0 0 l4tbr0
station PC의 경우 AP에서 바로 받는 IP라서 영향이 없을 것 같습니다. (windows 입니다)
참고 사항으로 route table의 usb1 이 본문에서 표현한 usb0 입니다.
그리고 brige(l4tbr0)가 있지만 usb1은 포함되어 있지 않습니다.
ping을 치면 아래와 같이 나옵니다...
nvidia@jetson-0423818076948:~$ ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
From 192.168.0.20 icmp_seq=1 Destination Host Unreachable
From 192.168.0.20 icmp_seq=2 Destination Host Unreachable
From 192.168.0.20 icmp_seq=3 Destination Host Unreachable
보통 정답은 '내가 알기로는 이런데' 가 틀렸다는 것
보통 정답은 '내가 알기로는 이런데' 가 틀렸다는 것 부터 시작합니다.
아무튼, 보여주기 싫으시니 뭐라 답변을 드릴 수는 없고.
station dev 에서, destination IP 가 station PC 인 패킷 어떤 장치를 타게 될 지 라우팅 테이블 살펴서 확인하시고.
station PC 에서, destination IP 가 station dev 인 패킷이 어떤 장치를 타게 될 지 라우팅 테이블 살펴서 확인하세요.
제가 생각하기로는 WiFi dev에서의 route
제가 생각하기로는 WiFi dev에서의 route table이 문제 일 것 같은데..
요점을 end 단의 장치에서 route table을 의심하시는 군요.
windows(station PC)의 route table을 따로 안적은 이유는 PC가 바로 AP에서 IP를 받기 때문에 이 경우는 route 에 전혀 영향이 없습니다.
그리고, station dev에서 WiFi dev로 ping을 보낼 경우
192.168.0.100 -> (usb0)192.168.0.2 로도 ping이 가고..
192.168.0.100 -> (ath0)192.168.10.132 로도 ping이 가기 때문에 WiFi dev로 의심을 한거구요.
뭐... 삽질하다 보면 언젠가는 해결되겠지요...
도움 주셔서 감사합니다.
station PC 에서, destination IP
station PC 에서, destination IP 가 WiFi dev 인 패킷과 destination IP 가 station dev 인 패킷이 동일하게 WiFi dev 장치와 연결된 nic 으로 라우팅이 될런지 먼저 보세요.
제발.
이런 확인이 끝난 다음에서나 봐야 할게 WiFi dev 에서의 라우팅입니다.
음 ..
WiFi 설정할 때 g/w 안 잡았다면, STA PC 에 default g/w 가 안 잡히겠죠.
STA PC 가 192.168.0.0/24 에 대한 라우팅이 안 잡혀 있다면..
ping 패킷을 받았다 하더라도, 응답 패킷이 나갈 데가 없을 겁니다.
그러니, 먼저 STA PC 의 라우팅 테이블을 살펴 보시거나, WiFi 설정이라도 확인해 보세요.
이게 다 확인 되고 난 후에야, 이제 어디가 문제일지 고민해 볼 수 있겠죠.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
음..
이건 NAT 를 보셔야 할 듯 합니다.
소곤소곤
일단 wifidev가 리눅스라고 가정을 하고,
일단 wifidev가 리눅스라고 가정을 하고,
wifi dev 에서 usb0 -> ath0 으로 패킷을 보내기 위하여 어떤 것을 한게 있나요?
단순히 routing table 만 가지고 하려고 하신다면 불가능 합니다. usb0 으로 들어온 패킷은 ath0 이 받는 순간 커널 입장에서는 source 주소가 다른 네트워크 이기 때문에 버려 버립니다. 그렇기 때문에 어찌 되었든 간에 이 문제를 해결하기 위하여 두 interface 간의 패킷 교환을 가능하게 해 주어야 합니다. 리눅스의 경우에는 커널 파라미터 중에서 ip forwarding 에 관련된 옵션이 있습니다. 이를 enable 해 주어야 합니다.
일단 여기 까지 되었다면, usb0 으로 들어온 패킷을 ath0 으로 넘겨 주어야 하는데, routing table 만으로는 불가능 합니다. 이를 행하기 위해서는 위의 분 말 처럼 NAT를 구성하거나, 또는 routing daemon 을 돌려 주셔야 합니다.
이를 위해서 사용할 수 있는 프로그램으로는, iptables, zebra, openvpn 등등의 프로그램들이 있습니다. zebra는 quazza 라고 fork를 한 버전을 더 많이 사용하는 것 같습니다.
역시 iptables를 사용해야 하는군요..
역시 iptables를 사용해야 하는군요.. routing table만으로 어찌 할 수 있는 방안이 있을까 아무리 해봐도 안되더군요.. defualt gw가 ath0로 되어 있다면 source가 다른 주소들은 ath0로 흘러 가지 않을까 생각했더랬습니다... ㅡㅡ;; iptables로 삽질 해 봐야겠습니다. 도움 주셔서 감사합니다.
혹시나 저같은 분들을 위해 추가 답변 남깁니다.
혹시나 저같은 분들을 위해 추가 답변 남깁니다.
iptables를 사용하면 됩니다.
route table만으로는 위분이 남기신 내용 그대로인 것 같습니다.
kernel config 에서 관련 config 설정해 주고...
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE
iptables -A FORWARD -i ath0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i usb0 -o ath0 -j ACCEPT
로 해결 했습니다.
오늘도... 삽질로 시간을 보내시는 분들을 위해...
조금 더 쉽게 설명을 드리자면, linux
조금 더 쉽게 설명을 드리자면, linux kernel은 기본적으로 router의 역할을 하게끔 만들어 져 있지 않습니다.
즉, routing table은 linux box에서 밖으로 나가는 경로에 대한 path를 처리하는 것이지 들어온 패킷을 다른 곳으로 전달하는 역할은 하지 않습니다. 오히려 다른 곳으로 들어오는 패킷이 들어오면 내 것이 아니기 때문에 버려 버립니다.
그래서 이 것을 처리하기 위하여, 다른 프로그램의 도움을 빌려야 하고, 도움을 줄 수 있는 것이 위의 분이 해결하신 NAT 가 있고, 또는 routing damone 을 운영할 수 있고, VPN 서버로도 비슷하게 문제를 해결할 수도 있습니다.
댓글 달기