iptables: 포트에서 들어오는 TCP 트래픽을 VPN 네트워크 내의 IP로 다시 라우팅합니다.

iptables: 포트에서 들어오는 TCP 트래픽을 VPN 네트워크 내의 IP로 다시 라우팅합니다.

포트가 열려 있는 원격 서버가 있습니다. 서버가 VPN 네트워크에 연결되어 있습니다. 내 로컬 컴퓨터도 이 VPN 네트워크에 연결되어 있습니다. 이런 방식으로 두 컴퓨터가 통신할 수 있습니다.

내가 하고 싶은 일은 내 로컬 컴퓨터에 http(websocket) 서버를 호스팅하고 내 서버의 IP 주소에 액세스하여 인터넷에서 해당 서버에 액세스하고 싶습니다.

다음 명령을 시도했지만 iptables작동하지 않는 것 같습니다.

iptables -t nat -A PREROUTING -p tcp --dport $SERVER_PORT -j DNAT --to-destination $LOCAL_MACHINE_VPN_ADDRESS:$SERVER_PORT
iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j SNAT --to-source $SERVER_LOCAL_NETWORK_ADDRESS

내 예의 정확한 값은 다음과 같습니다.

SERVER_PORT=6767
LOCAL_MACHINE_VPN_ADDRESS=10.0.1.255
SERVER_LOCAL_NETWORK_ADDRESS=193.108.113.52

인터페이스 아래의 명령을 SERVER_LOCAL_NETWORK_ADDRESS읽었습니다 . 다음 문자열이 있습니다: .ip addreth0inet 193.108.113.52/24 scope global eth0

나는 여기서 조금 길을 잃었습니다. 어떤 방식으로든 명시적으로 설정 eth0하고 인터페이스 해야 합니까 ?wg0

제가 확신하는 것 중 하나는 VPN 구성입니다. nginx이 서버에서 VPN을 실행하고 로컬 컴퓨터에 프록시하고 있으며 잘 작동합니다.

답변1

eth0 인터페이스 아래의 명령을 읽었습니다 SERVER_LOCAL_NETWORK_ADDRESS. ip addr다음 문자열이 있습니다: inet 193.108.113.52/24 scope global eth0.

VPN 내에서 패킷을 라우팅하려고 하고 일반 인터넷 액세스(예: 홈 라우터)가 아닌 곳에서 공용 IP 주소를 수신할 수 있도록 LOCAL_MACHINE에 특별한 라우팅 조정이 없으므로 WireGuard에는 특별한 라우팅 조정이 없습니다. 이를 허용하도록 설정을 조정하세요. POSTROUTINGiptablesSERVER의 명령은 주소를 공용 주소가 아닌 로컬 WireGuard 터널 주소로 설정해야 합니다. 위의 정보는 필요하지 않으며 작동하지 않습니다.

대신 그냥 사용하세요 -j MASQUERADE(원격 서버의 WireGuard 주소를 모르기 때문에 10.0.1.1과 같을 수도 있고 그렇지 않으면 주소 변경을 제안할 수도 있습니다 -j SNAT). 따라서 iptables아래의 마지막 명령은 다음과 같습니다.

iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j SNAT --to-source $SERVER_LOCAL_NETWORK_ADDRESS

다음으로 교체해야 합니다:

iptables -t nat -A POSTROUTING -p tcp -d $LOCAL_MACHINE_VPN_ADDRESS --dport $SERVER_PORT -j MASQUERADE

노트:

모든 경우에 SNAT 또는 MASQUERADE를 수행하면 Websocket 서비스가 인터넷 클라이언트의 실제 IP 주소를 볼 수 없습니다. 해당 주소는 항상 원격 서버의 주소입니다.

웹소켓 서비스가 인터넷 클라이언트의 실제 공개 주소를 보려면 실제라우팅, 관련정책 기반 라우팅이제 LOCAL_MACHINE은 NAT를 사용하는 대신 멀티홈이어야 하기 때문입니다. 이를 위해서는 무엇을 변경해야 할지 알기 위해 제공되지 않은 WireGuard 구성을 포함하여 원격 및 로컬 서버의 전체 네트워크 구성을 이해해야 합니다.

참고만 하세요.iptables(또는nftables또는웹 필터)은 라우팅되지 않습니다. 이는 경로와 관련된 주소나 기타 속성을 변경할 수 있으며, 라우팅 스택이 이를 확인하기 전에 이 변경이 완료되면 간접적으로 라우팅 결정을 변경할 수 있습니다(예: PREROUTING). 실제 라우팅은 를 ip route사용하여 수행되며, 정책 기반 라우팅의 경우 을 사용 ip rule하거나 네트워크 구성 도구를 사용하여 이러한 명령과 동일한 작업을 수행할 수도 있습니다.

관련 정보