
내 클라이언트(Windows)의 모든 포트를 게이트웨이(Linux) 뒤에 있는 서버(Windows)로 전달하고 싶습니다.
내 네트워크 토폴로지는 다음과 같습니다.
10.20.10.14 --> 10.20.10.4 --> 192.168.1.1 --> 192.168.1.4
client ppp0 eth0 server
|--------- Gateway -------|
여기서 게이트웨이 장치에는 ppp0과 eth0이라는 두 개의 네트워크 장치가 있습니다.
클라이언트와 ppp0 사이의 네트워크 연결의 경우 서버 장치가 클라이언트에서 전송된 것과 동일한 포트에서 데이터를 볼 수 있기를 바랍니다.
즉, 서버는 클라이언트와 직접 통신하고 이 경우 게이트웨이가 투명하다고 생각해야 합니다.
또한 이 규칙을 제거하는 방법을 알고 싶습니다.
어떤 아이디어가 있나요?
비고: 나는 모든 장치의 관리자입니다.
답변1
영어 규칙을 iptables 규칙으로 변환하려면 다음 규칙만 필요합니다.
iptables -t nat -A PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4
대상 포트는 변경되지 않습니다(클라이언트가 동시에 서버에 직접 연결하는 드문 경우를 제외하고 소스 포트도 변경되어서는 안 됩니다).
클라이언트가 수동으로 경로를 추가하고 서버에 직접 액세스하는 것을 방지하는 것은 192.168.1.4
없습니다 10.20.10.4
. 이를 원하지 않는 경우 서버의 IP를 숨긴 상태로 유지하려면 다음 규칙을 추가할 수도 있습니다.
iptables -I FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP
이렇게 하면 DNATed되지 않은 서버에 대한 직접 액세스가 삭제됩니다.
해당 규칙을 제거하려면 다음을 사용하십시오 -D
.
iptables -D FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP
iptables -t nat -D PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4
무작위 발언:
- DNATed 연결이 전달되므로 게이트웨이에서 IP 전달을 활성화해야 합니다. 이렇게 하는 것이 가장 쉬운 방법입니다
echo 1 > /proc/sys/net/ipv4/ip_forward
. - 물론 서버는 연결을 수락하기 위해 클라이언트에 대한 경로가 필요합니다. 예를 들어 게이트웨이(
192.168.1.1
)를 기본 게이트웨이로 사용하는 것입니다. -i ppp0
선택 사항이며 제거할 수 있습니다(또는-d 10.20.10.4
원하는 경우 PREROUTING 규칙으로 대체할 수 있습니다).-i ppp+
와일드 카드 로 바꾸지 않으면 문제가 발생할 수 있습니다+
. 빠른 링크 실패/재연결이 있을 때 이전에 분리되지 않았다면ppp1
새 ppp 인터페이스가 호출될 수 있습니다.ppp0
iptables 규칙이 더 이상 일치하지 않습니다.- 이미 설정된 흐름은 DNAT 규칙이 제거될 때 영향을 받지 않으며, 새로운 흐름은 영향을 받습니다(즉, 서버에 도달하지 않습니다).