누구든지 해결책이 있습니까?역방향 경로 필터링(느슨한 모드에서) 다음에도 작동합니다.IPv6IPv4뿐만 아니라?
내 설정은 머신 1이 머신 2에 직접 연결되고 머신 1도 외부 네트워크에 연결된다는 것입니다.
대상 트래픽은 다음과 같습니다. 외부 네트워크의 클라이언트는 machine1에 요청을 보낸 다음 machine1이 요청을 machine2에 전달합니다.
명백한 질문:패킷이 machine1에 의해 처리되면 machine2에 연결된 포트로 전달되지만 클라이언트의 소스 IP가 사용됩니다. 이는 일반적으로 IP를 스푸핑하는 것으로 간주됩니다. 하지만 이것이 바로 rp_filter의 용도입니다. 그렇죠?
일반적으로 machine1에서는 이 작업을 수행합니다(IPv4의 경우).
echo 2 > /proc/sys/net/ipv4/conf/<interface_to_outside_net>/rp_filter
모든 것이 작동하지만 IPv6의 경우에는 rp_filter가 아직 IPv6용 커널에 구현되지 않았기 때문에 그렇지 않습니다. 내가 아는 유일한 해결책은 ip6tables를 설정하는 것입니다.
현재 설정:
ip6tables -t raw -N RPFILTER ip6tables -t raw -A RPFILTER -m rpfilter -j RETURN ip6tables -t raw -A RPFILTER -m rpfilter --loose -j ACCEPT ip6tables -t raw -A PREROUTING -j RPFILTER
그러나 어떤 이유로 트래픽이 machine2에 도달하지 못하고 클라이언트 측에서 시간 초과가 발생합니다.
machine1에서 tcpdump를 사용하면 TCP 핸드셰이크에 대한 SYN만 얻습니다.
14:18:50.390292 IP6 fd11:3456:789a:1::4.34184 > fd12:3456:789a:1::1.1111: Flags [S], seq 701159610, win 28800, options [mss 1440,sackOK,TS val 6066549 ecr 0,nop,wscale 7], length 0
다른 사람은 없어...
어떤 제안이 있으십니까?
답변1
스포일러
/etc/network/interfaces/
문제는 실제로 IPv6 주소를 사용하지 않고 "만" 설정하는 것과 관련이 있었습니다 ip a a ...
. 다를 거라고는 생각도 못했는데 이번에는 그렇네요.
해결책에 도달하는 단계:
조사하는 동안 machine2에서 machine1로 간단한 ping6을 수행했는데, 이상하게도 내가 겪고 있던 문제가 해결되었습니다.
그 후 TCP 핸드셰이크가 올바르게 생성되어 내가 curl -g -6 ..
하고 싶었던 타겟 명령을 실행할 수 있게 되었고 드디어 동의하게 되었습니다!
그런데 생각해보니...그건 말도 안 되는 일인데 왜 ICMPv6가 이것을 처리하지 않는 걸까? 이로 인해 나는 ip -6 neigh show
machine1에 대한 항목이 실제로 있음을 보여주는 ndp() 테이블을 확인해야 한다고 생각하게 되었습니다.실패.
이는 어떤 이유로 ICMPv6가 이웃 요청/광고를 교환할 수 없음을 의미합니다.
마지막으로 간단히 컴퓨터를 다시 시작하면 일반적으로 모든 문제가 해결된다는 사실을 기억했습니다. 그러나 ip a a ...
인터페이스에 이 구성만 사용했기 때문에 구성이 새로 고쳐졌기 때문에 /etc/network/interfaces/
올바른 IPv6 주소를 구성하고 컴퓨터를 다시 시작했습니다.
이것이 모든 문제의 근원입니다 ;)
해결책:
IPv6의 느슨한 모드의 경우 rp_filter로 아무것도 수행하지 마십시오. ==> 기본적으로 활성화되어 있습니다.
인터페이스를 올바르게 구성했는지 확인하십시오. :)
추신: 내가 뭘 망쳤는지 아는 사람 있나요? 왜 간단히 사용할 수 없습니까 ip address add....
? 감사해요.
답변2
비슷한 질문입니다. 확인해 주셔서 감사합니다 ip -6 neigh show
.
제 경우에는 엔드포인트가 동일한 네트워크 ID(접두사)에 속하지 않았습니다.
예:
머신 A fd00:1:1/64%eth0은 eth0의 fd00:1:1에 대한 Neighbor Solicitation 메시지에 대해 MAC 주소로만 응답합니다.
시스템 A에 fd00:2::1/64%eth1도 있는 경우 eth0의 fd00:2::1 요청에 응답하지 않습니다.