다음과 같은 IPv4 규칙이 있습니다.
iptables -t nat -A PREROUTING -d "server ipv4" -p tcp -m tcp --dport 80 -i eth0 - j DNAT --to-destination 127.0.0.1:55555
iptables -P INPUT ACCEPT
또한 주소를 수신하는 간단한 프록시가 있습니다 localhost
: 127.0.0.1:55555
IPv4에서는 잘 작동합니다.
IPv6에서 동일한 작업을 수행하려고 하면 다음과 같습니다.
iptables -t nat -A PREROUTING -d "server ipv6 " -p tcp -m tcp --dport 80 -i eth0 -j DNAT --to-destination [::1]:55555
ip6tables -P INPUT ACCEPT
나는 그것을 작동시킬 수 없습니다!
나는 그것을 작동시킬 수 있습니다 :
--to-destination ["link-local IPv6"]:55555
--to-destination ["Server IPv6"]:55555
전달을 켜고 필터 테이블에 일부 로그 줄을 추가하면 전달 체인이 됩니다.
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
ip6tables -I FORWARD -j LOG --log-prefix='[filter FORWARD] '
패킷이 보이네요.
[268332.372177] [필터 전달] IN=eth0 OUT=eth0 MAC=be:69:fd:2a:9e:bd:0a:08:f1:46:19:a1:86:df SRC= DST=0000:0000: 0000:0000:0000:0000:0000:0001 LEN=80 TC=0 HOPLIMIT=63 FLOWLBL=0 프로토콜=TCP SPT=42082 DPT=55555 창=28800 RES=0x00 SYN URGP=0
OUT 인터페이스가 "lo" 대신 "eth0"이고 커널은 패킷이 해당 서버용이 아니라고 생각하는 것을 볼 수 있습니다.
나는 centOS 7을 가지고 있고 Ubuntu 16에서도 이것을 시도했습니다.
답변1
수행 중인 작업에 fwmark를 추가하고 특수 라우팅 테이블을 사용하려면 IP 규칙을 추가하는 것이 좋습니다. 양식에 다음과 같이 입력하면 됩니다: Route to dev lo. dnat는 재작성을 담당하고 fwmark는 프록시가 응답할 수 있도록 lo로의 라우팅을 담당합니다.