나가는 모든 패킷(특히 DNS)의 대상 IP를 변경하는 방법은 무엇입니까?

나가는 모든 패킷(특히 DNS)의 대상 IP를 변경하는 방법은 무엇입니까?

최신 버전의 (Debian) 라즈베리 파이 OS가 설치된 Raspberry Pi 4가 있습니다. iptablesPi(사용)의 모든 트래픽을 다른 컴퓨터(IP 주소 사용 가정)로 리디렉션하도록 구성하려고 합니다 . 이는 DNS 기반 종속 포털을 호스팅할 다른 컴퓨터를 테스트하기 위한 것이며 모든 트래픽을 이 종속 포털 컴퓨터(IP B)로 전달하려고 합니다. 저는 헤드리스 설정을 좋아하기 때문에 전달하지 않고 SSH 연결을 유지할 수 있다면 좋을 것 같습니다.

NAT 테이블( )에서 이 규칙 세트를 시도했습니다 iptables. 나는 내가 시도한 것이 IP A에서 IP B로 UDP 트래픽을 전달하려고 시도했다는 것을 깨달았습니다. 이것은 작동하지 않습니다.

root@pi4:/home/pi# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 7 packets, 1155 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       udp  --  *      *       <IP A>               <resolver IP>       udp dpt:53 to:<IP B>

Chain INPUT (policy ACCEPT 7 packets, 1155 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

어떤 도움이나 조언이라도 대단히 감사하겠습니다.

답변1

나는 그것을 생각했다! 내 체인 규칙이 단순히 잘못된 위치에 배치된 것으로 나타났습니다. 내부적으로 생성된 대상 IP 주소를 수정하고 싶기 때문에 PREROUTING 규칙을 OUTPUT에 넣어야 합니다. 마지막으로 내 NAT 테이블은 다음과 같습니다(질문에서 자리 표시자 IP를 유지하세요).

# Generated by iptables-save v1.8.7
*nat
:PREROUTING ACCEPT [22:2797]
:INPUT ACCEPT [22:2797]
:OUTPUT ACCEPT [129:8883]
:POSTROUTING ACCEPT [129:8883]
-A OUTPUT -d <resolver IP>/32 -p udp -m udp --dport 53 -j DNAT --to-destination <IP B>:<port B>
-A POSTROUTING -d <IP B>/32 -p udp -m udp --dport <port B> -j SNAT --to-source <IP A>
COMMIT
# Completed on

관련 정보