TUN 장치 (C ++ 백엔드)에서 기본 게이트웨이로 트래픽 전달


10

다음 문제는 내가 문제가있는 더 큰 솔루션 중 하나 일뿐입니다. 다른 모든 요소는 지금까지 작동하는 것처럼 보이므로 문제가있는 매우 작은 조각을 설명하려고 노력할 것입니다.

tun0 (터널링 인터페이스) 및 eth0 (스위치는 인터넷의 기본 게이트웨이입니다 ) 이있는 Linux 컴퓨터 가 있습니다.

목표 : 내 목표는 tun0에서 들어오는 패킷을 수신하여 기본 게이트웨이로 전달하는 것입니다. 실제 인터페이스를 위조하는 tun0으로 인터넷을 "공유"하고자하는 아주 간단한 NAT 사례입니다.

Tun은 다음을 사용하여 만들어졌습니다.

sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up

그래서 나는 그것을 가지고 있고, 핑 할 수 있습니다. 또한,이 TUN 장치에 연결되는 C ++ 응용 프로그램을 읽고 쓸 수 있습니다. (fti : 여기 내가 따라온 튜토리얼이 있습니다 : http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )

8.8.8.8에 대한 올바른 ICMP (ping) 요청을 C ++의 바이트 배열에 덤프했습니다. 이제 내 프로그램을 사용하여 tun0 장치에 씁니다. ICMP 요청은

  • 소스 (10.2.0.10)-커널은 경로를 알고 있습니다 (동일한 서브넷)
  • 대상 (8.8.8.8)-Google의 DNS
  • 올바른 체크섬 등 (Wireshark / TShark에서는 tun0에 올바르게 나타남)

그런 다음 다음과 같은 경로가 있습니다.

iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT

그리고 여기에 붙어 있습니다 : (패킷은 기본 gw로 전달되지 않습니다 (tshark는 수신 된대로 tun0에서만 볼 수 있습니다.

무엇이 빠졌습니까? 어쩌면 다른 대안이 될 수도 있습니다 (그러나 tun 장치를 사용하여 수행해야하며 r / w 할 수 있어야합니다). 추가 정보:

  • 전달이 가능합니다 (/ proc / sys / net / ipv4 / ip_forward)
  • 8.8.8.8은 eth0을 통해 연결할 수 있습니다 (로컬에서)
  • 기본 게이트웨이가 정확합니다 (ISP에서 eth0을 통해)
  • rp_tables를 끄려고했습니다 (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
  • 그리고 많은 다른 사람들...

힌트를 미리 주셔서 감사합니다!


나는 이것이 1 년 이상 된 것을 알고 있지만, 당신은 이것으로 어디서나 얻었습니까? 나는 정확히 같은 문제가 있습니다.
hplbsh

답변:


1

다른 해결책은 bridge.0을 eth0과 브리지 할 수 있으며 tun0에서 nat을 설정하거나 ip를 설정할 필요가 없습니다. 클라이언트 터널 인터페이스에서 현재 사용중인 동일한 eth0 서브넷과 동일한 게이트웨이에서 IP를 넣으면됩니다.

브리지 설정 명령 :

# brctl addbr br0
# brctl addif br0 eth0 tun0

www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge

brctl을 사용하려면 bridge-utils패키지 를 설치해야 합니다.
배포판이 우분투 인 경우 :aptitude install bridge-utils


1

나는 최근 에이 문제 (질문에서 같은 기사 언급)에 부딪 쳤고 조금 둘러 본 후에 다음 명령을 사용하여 tun 장치의 패킷을 로컬로 전달할 수 있음을 발견했습니다.

echo 1 > /proc/sys/net/ipv4/conf/tun0/accept_local

나는 매우 늦었다는 것을 알고 있습니다. 나는 같은 문제에 직면 한 사람이 어떤 종류의 도움을 줄 수 있도록 여기에 게시하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.