eth에서 TUN/TAP으로 트래픽을 전달할 수 없습니다.

eth에서 TUN/TAP으로 트래픽을 전달할 수 없습니다.

enp5s0물리적 인터페이스에서 가상 인터페이스로 트래픽을 전달하려고 합니다 tun0. 목표는 기본적으로 tun0에서 오는 모든 패킷을 수신하는 것입니다 enp5s0.

먼저 다음 명령을 사용하여 전달을 활성화했습니다.

sudo sysctl -w net.ipv4.ip_forward=1

그런 다음 tun0실행하여 만들었습니다.

sudo ip tuntap add dev tun0 mod tun

IP 주소를 할당하고 장치를 켭니다.

sudo ifconfig tun0 10.1.8.5 netmask 255.255.255.0 promisc up

enp5s0에서 까지의 모든 패킷을 원하므로 tun0사용해야 합니다.iptables. enp5s0에서 로의 전달을 허용하는 규칙을 만들어야 하므로 tun0명령은 다음과 같습니다.

sudo iptables -A FORWARD --in-interface tun0 --out-interface enp5s0 -j ACCEPT

그런 다음 다음을 실행하여 NAT를 활성화했습니다.

sudo iptables -t nat -A POSTROUTING --out-interface enp5s0 -j MASQUERADE

TCP 덤프디스플레이에 트래픽이 없습니다 tun0.

또한 거의 동일한 작업을 시도했지만 TAP 장치를 사용했습니다. 브리지를 사용 brctl, 추가 및 생성했지만 패킷을 수신하지 못하며 모든 것이 잘 작동합니다 . TUN의 경우에는 효과가 없습니다. 오류는 어디에 있습니까?tap0enp5s0tap0enp5s0default gw 10.1.8.5

답변1

iptables 명령에서는 입력 및 출력 인터페이스가 반전됩니다.

그들은 다음과 같아야 합니다:

sudo iptables -A FORWARD --in-interface enp5s0 --out-interface tun0 -j ACCEPT

그리고:

sudo iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE

답변2

문제는 패킷이 해당 인터페이스에 들어가도록 하는 것입니다. 이는 라우팅이나 iptables를 통해 수행할 수 있습니다.

첫 번째 테스트: 자신의 호스트에서 다음과 같이 핑을 보냅니다 10.1.8.57. tcpdump에 표시되어야 합니다. 이것을 하지 않으면 다른 어떤 것도 작동하지 않습니다. 그러니 고치세요.

라우팅부터 시작하세요. 이미 생성된 호스트의 tun0 반대편에 네트워크를 선언합니다 10.1.8.0/24. enp5s0 링크 반대편에 있는 호스트에 항목을 배치하여 호스트로 라우팅합니다. 해당 호스트에서 다음과 같이 핑을 보냅니다 10.1.8.57. 이는 tcpdump에 표시되어야 합니다.

iptables로 이동합니다. 이 경우 원하는 것은 일반적으로 호스트로 전송되는 패킷을 가져와 TUN 인터페이스로 전달하는 것입니다. 이를 달성하는 비결은 DNAT 규칙입니다. 내 생각에는 다음과 같다.

iptables -t nat -A PREROUTING --in-interface enp5s0 -j DNAT --to-destination 10.1.8.57
iptables -t nat -A OUTPUT --in-interface enp5s0 -j DNAT --to-destination 10.1.8.57

(실제로 이 타겟은 PREROUTING과 OUTPUT 모두에서 작동하며, 사용할 때는 분명히 둘 다에 적용합니다. 둘 다 필요한지, 하나만 필요한지, 아니면 서로 다른 경우를 수행하는지 잘 모르겠습니다.) 초기 테스트를 위해 저는 -p tcp -m tcp --dport 5000포트 5000에 추가한 후 연결을 시도하는 등 재라우팅되는 항목에 대한 추가 제한 사항을 추가하는 것이 좋습니다 . 조심하지 않으면 컴퓨터에서 자신을 완전히 제외시킬 수 있습니다.

관련 정보