route table 관련 질문 드립니다.

sjwksh의 이미지


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

제가 무엇을 놓치고 있을 까요?

고수님들의 지식 공유 부탁드립니다.

미리 감사합니다.

bushi의 이미지

station dev 와 station PC 의 라우팅 테이블을 보여주세요.
WiFi dev 가 중간에서 중계를 못해주고 있는 것인지, 아예 패킷을 받지도 못 한 것인지 명확하지 않습니다.

sjwksh의 이미지

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

bushi의 이미지

보통 정답은 '내가 알기로는 이런데' 가 틀렸다는 것 부터 시작합니다.
아무튼, 보여주기 싫으시니 뭐라 답변을 드릴 수는 없고.

station dev 에서, destination IP 가 station PC 인 패킷 어떤 장치를 타게 될 지 라우팅 테이블 살펴서 확인하시고.
station PC 에서, destination IP 가 station dev 인 패킷이 어떤 장치를 타게 될 지 라우팅 테이블 살펴서 확인하세요.

sjwksh의 이미지

제가 생각하기로는 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로 의심을 한거구요.

뭐... 삽질하다 보면 언젠가는 해결되겠지요...

도움 주셔서 감사합니다.

bushi의 이미지

station PC 에서, destination IP 가 WiFi dev 인 패킷과 destination IP 가 station dev 인 패킷이 동일하게 WiFi dev 장치와 연결된 nic 으로 라우팅이 될런지 먼저 보세요.
제발.
이런 확인이 끝난 다음에서나 봐야 할게 WiFi dev 에서의 라우팅입니다.

ymir의 이미지

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가 리눅스라고 가정을 하고,

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를 한 버전을 더 많이 사용하는 것 같습니다.

sjwksh의 이미지

역시 iptables를 사용해야 하는군요.. routing table만으로 어찌 할 수 있는 방안이 있을까 아무리 해봐도 안되더군요.. defualt gw가 ath0로 되어 있다면 source가 다른 주소들은 ath0로 흘러 가지 않을까 생각했더랬습니다... ㅡㅡ;; iptables로 삽질 해 봐야겠습니다. 도움 주셔서 감사합니다.

sjwksh의 이미지

혹시나 저같은 분들을 위해 추가 답변 남깁니다.

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 kernel은 기본적으로 router의 역할을 하게끔 만들어 져 있지 않습니다.

즉, routing table은 linux box에서 밖으로 나가는 경로에 대한 path를 처리하는 것이지 들어온 패킷을 다른 곳으로 전달하는 역할은 하지 않습니다. 오히려 다른 곳으로 들어오는 패킷이 들어오면 내 것이 아니기 때문에 버려 버립니다.

그래서 이 것을 처리하기 위하여, 다른 프로그램의 도움을 빌려야 하고, 도움을 줄 수 있는 것이 위의 분이 해결하신 NAT 가 있고, 또는 routing damone 을 운영할 수 있고, VPN 서버로도 비슷하게 문제를 해결할 수도 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.