모두:
최근에는 VPN(0x1000/0x1000)을 통해 포트 443을 통해 특정 대상(172.67.168.48)으로 트래픽을 라우팅하는 몇 가지 새로운 iptables(RE: 아래 코드 조각) 규칙을 추가했습니다. 새로운 규칙은 필요에 따라 VPN을 통해 NAT를 수행했지만 위의 목표와 관련 없는 다른 HTTP 요청이 400 잘못된 요청 오류 응답을 생성하도록 하는 바람직하지 않은 영향을 미쳤습니다.
# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993 # VPN 1 fwmark
iptables -t mangle -A PREROUTING -i br0 -p tcp -d 172.67.168.48 --dport 443 -j MARK --set-mark 0x1000/0x1000
iptables -t nat -A PREROUTING -i br0 -p tcp -m mark --mark 0x1000/0x1000 -j DNAT --to-destination 172.67.168.48:443
대상 주소와 포트가 명시적으로 지정된 경우 다른 HTTP 요청이 새로운 NAT 규칙(400 잘못된 요청)의 영향을 받는 이유가 무엇인지 아십니까?
시간을 내어 도와주셔서 감사합니다.
감사합니다,
게리
답변1
VPN 서버:가설이더넷 0(IP 1.2.3.4
)는 대상 웹 서버의 IP 또는 네트워크에 직접 연결되거나 최소한 이에 대한 경로가 있는 물리적 인터페이스입니다. 웹 서버 IP로 이동하는 모든 트래픽을 모니터링하고 172.67.168.48:443
강제로 VPN 터널을 통과한 다음 NAT로 연결할 수 있습니다. eth0의 IP 주소( 1.2.3.4
이 경우). 이 경우,br0인터페이스(IP 10.10.10.1
)는 VPN 서버가 터널 트래픽에 사용하는 가상 인터페이스입니다. VPN이 실행 중일 때 패킷을 대상 IP로 라우팅하는 방법을 이미 알고 있습니다.172.67.168.48
그렇지 않은 경우 정적 경로를 추가해야 합니다.
$ ip route show
172.67.168.48/32 via 10.10.10.1 dev br0 metric 101
라우팅 설명이 충족되면 IP에 대한 트래픽이 172.67.168.48:443
터널을 통해 라우팅되고 반대쪽으로 1.2.3.4
나가도록 강제할 수 있습니다.172.67.168.48
$ sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 172.67.168.48 --dport 443 -j SNAT --to-source 1.2.3.4
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
예를 들어 클라이언트가 에 패킷을 보내면 172.67.168.48:80
소스 IP는 변경되지 않으며 후속 체인에서 허용하지 않으면 패킷이 삭제될 수 있습니다.
답변2
모두:
내 원래 iptables -t nat 규칙에 --dport 443 정의가 누락되었으며 다른 HTTP 요청과 상호작용한 이유가 밝혀졌습니다.
# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993 # VPN 1 fwmark
iptables -t mangle -A PREROUTING -i br0 -p tcp --dport 443 -d 172.67.168.48 -j MARK --set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination 172.67.168.48:443 -m mark --mark 0x2000/0x2000
iptables -t nat 규칙에 --dport 443 정의를 추가한 후 문제가 해결되었습니다.
이것이 앞으로 다른 사람들에게 도움이 되기를 바랍니다.
존경,
게리