wlan0쪽이 테더링을 통해 인터넷 연결이 가능한 외부망이고 eth0 쪽은 내부망이며
NS-3 가상 디바이스는 내부망에 매달려있는 구성인 것 같은데요.
인터넷 <---> 안드로이드장치 <---> wlan0 - 리눅스박스 - eth0 <---> NS-3 가상 디바이스
혹시, 안드로이드로부터 공유받은 wlan0쪽 테더링 회선을 eth0쪽 내부망에 재공유하는 것을 원하시는 건가요?
그렇다면 아래와 같이 하시면 될 겁니다. 부팅뒤에도 설정유지하려면 여기 등을 참조하시고요.
# 커널의 패킷포워딩 기능을 켜고,
$ sudo sysctl -w net.ipv4.ip_forward=1
# iptables 규칙을 적당히 설정하여 인터넷 공유가 이뤄지게 함.
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables -t filter -A FORWARD -i eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o eth0 -j ACCEPT
원하시는 바가 이것이 아니라면, iptables 규칙을 바꿔서 해결되는지 검토해보시고요.
예를 들어, 위와 같은 NAT기능까지 필요한 것이 아니고 단지 서로 다른 망에 속한
안드로이드 장치와 NS-3 가상 디바이스가 중간의 리눅스박스를 게이트웨이삼아 자유롭게 패킷교환만 하면 되는 상황이라면
위 규칙에서 nat 규칙은 제거하고 wlan0에 대한 FORWARD 허용규칙만 eth0처럼 넣어주면 될 것입니다.
( 이 경우 물론 두 장치에서 gateway가 리눅스박스 주소로 각각 설정되어야 할 것이고요 )
# 커널의 패킷포워딩 기능을 켜고,
$ sudo sysctl -w net.ipv4.ip_forward=1
# iptables 규칙을 적당히 설정하여 별도망 사이의 패킷중계가 이뤄지게 함.
$ sudo iptables -t filter -A FORWARD -i eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -i wlan0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o wlan0 -j ACCEPT
wlan0쪽이 테더링을 통해 인터넷 연결이 가능한
wlan0쪽이 테더링을 통해 인터넷 연결이 가능한 외부망이고 eth0 쪽은 내부망이며
NS-3 가상 디바이스는 내부망에 매달려있는 구성인 것 같은데요.
혹시, 안드로이드로부터 공유받은 wlan0쪽 테더링 회선을 eth0쪽 내부망에 재공유하는 것을 원하시는 건가요?
그렇다면 아래와 같이 하시면 될 겁니다. 부팅뒤에도 설정유지하려면 여기 등을 참조하시고요.
원하시는 바가 이것이 아니라면, iptables 규칙을 바꿔서 해결되는지 검토해보시고요.
예를 들어, 위와 같은 NAT기능까지 필요한 것이 아니고 단지 서로 다른 망에 속한
안드로이드 장치와 NS-3 가상 디바이스가 중간의 리눅스박스를 게이트웨이삼아 자유롭게 패킷교환만 하면 되는 상황이라면
위 규칙에서 nat 규칙은 제거하고 wlan0에 대한 FORWARD 허용규칙만 eth0처럼 넣어주면 될 것입니다.
( 이 경우 물론 두 장치에서 gateway가 리눅스박스 주소로 각각 설정되어야 할 것이고요 )
위 규칙들은 테스트까지 해 본 것은 아님을 밝혀둡니다.
gilgil.net
> 프로그래밍을 통해서 wlan0으로 들어온패킷을 eth0으로 그냥 전달하고싶은데 ( 인터넷 스택을 이용하지않고 )
raw level로 wlan0로부터 패킷을 수신받아서 eth0로 쏴 주면 됩니다.
pcap api에 대해서 공부해 보세요.
pcap_next_ex : 패킷을 받는 함수
pcap_send_ex : 패킷을 쏘는 함수
www.gilgil.net
댓글 달기