외부 IP/포트에 대한 요청을 내부 IP/포트로 리디렉션하시겠습니까?

외부 IP/포트에 대한 요청을 내부 IP/포트로 리디렉션하시겠습니까?

n-1개의 웹 연결 가상 머신 전용 n개의 공용 IP 주소로 KVM 가상화를 실행하는 전용 서버가 있습니다. 이제 개인 주소가 없고 대신 호스트에서 2~3개의 포트가 전달되는 일부 웹 연결 VM을 설정하려고 합니다.

브리지 구성은 다음과 같습니다.

brctl show

여기에 이미지 설명을 입력하세요.

내가 전달하고 싶다고 가정 해 봅시다

  • 178.126.193.153:201 ~ 192.168.1.101:22
  • 178.126.193.153:801 ~ 192.168.1.101:80

먼저 주석 처리를 제거하여 호스트에서 포트 전달을 활성화했습니다.

# net.ipv4.ip_forward=1

, 그럼 /etc/sysctl.conf내가 그랬어

sysctl -p /etc/sysctl.conf
service network restart

그럼 위의 레시피와 비슷하게이 문제,나는 그랬다:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 201 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i br0 --dport 801 -j DNAT --to-destination 192.168.1.101:80
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 801 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

클라이언트 시스템에서 실행하여 ifconfig해당 인터페이스 eth0의 IP 주소가 실제로 192.168.1.101인지 확인했습니다. 가상머신 내부의 인터페이스는 이라고 하죠 eth0?

하지만 작동하지 않습니다.

nmap 178.126.193.153열린 포트 201 또는 801이 표시되지 않아 ssh -l root -p 201 178.126.193.153혼란스럽습니다.

ssh: connect to host 178.126.193.153 port 201: Connection refused

ip route호스트로 돌아가기

178.126.193.128/26 dev br0  proto kernel  scope link  src 178.162.193.153 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 
169.254.0.0/16 dev br0  scope link  metric 1004 
default via 178.126.193.190 dev br0 

내가 뭘 잘못했나요?

답변1

트래픽을 다른 포트로 전달하는 경우 경로 후 SNAT 규칙을 추가해야 합니다(또는 가장하는 것은 중요하지 않음). 또한 순방향 규칙에서도 몇 가지 실수를 저질렀습니다. 그러니 이것을 시도해 보세요:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -d 192.168.1.101 -p tcp --dport 22 -j SNAT --to-source 178.126.193.153

답변2

루프백 라우팅을 활성화해야 합니다. 내 라우터에서 다음을 수행했습니다.

iptables -A FORWARD -o eth1 -d $IP -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

내 설정에서는 eth0이 인터넷 인터페이스이고, $IP가 인터넷 IP이고, eth1이 내부 인터페이스입니다.

여기서 핵심은 내부 인터페이스에서 외부 대상 IP로의 트래픽을 처리하려면 FORWARD 규칙이 필요하다는 것입니다. 이 규칙은 DNAT보다 먼저 적용되기 때문에 논리적으로 다소 혼란스럽습니다.

두 번째 규칙은 내부 트래픽이 먼저 전달되도록 허용하며, 이를 다른 방법으로 달성할 수 있습니다.

이 작업을 수행하기 위해 ebtables가 필요할 수 있는 가상 네트워크 부분으로 인해 다른 특별한 경우가 있는지 잘 모르겠습니다.

관련 정보