enp7s0에서 localhost:80으로 포트 포워딩하는 방법

enp7s0에서 localhost:80으로 포트 포워딩하는 방법

나는 꽤 혼란스럽고 전혀 이해하지 못합니다 iptables.

nginx 서버가 수신 대기 중이고 localhost:80내 NIC의 ip 로 액세스하고 싶습니다 192.168.29.167:80. 나는 팔로우하고 있었다디지털 오션규칙 설정에 대한 튜토리얼입니다.

나의:

유형 상호 작용 주소
local lo 127.0.0.1
NIC lan enp7s0 192.168.29.167

내가 그랬어,

iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1

PREROUTING, POSTROUTING및 규칙을 설정해도 FORWARD아무런 작업이 수행되지 않았습니다. 을(를 localhost:80) 통해 액세스할 수 없습니다 enp7s0.

(참고: 나는 가지고 있다 sudo sysctl -w net.ipv4.ip_forward=1)

답변1

  1. 규칙 에 오류가 있습니다 nat. 인터페이스 이름이 잘못된 것 같습니다. DNAT입력 인터페이스 이름이 아닌 대상 주소를 기반으로 사용하는 것이 좋습니다 . 따라서 원하는 것을 달성하려면 단일 규칙만 필요합니다.
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
  1. 이러한 패킷은 전달(전송)되지 않지만 입력됩니다. filter/INPUT가 아닌 체인 에서 이 트래픽을 허용해야 합니다 filter/FORWARD. 작업 후에도 DNAT입력 인터페이스는 변경되지 않습니다(따라서 enp7s0가 아닌 인터페이스를 지정해야 함 lo). 그러나 DNAT단일 규칙을 사용하면 모든 연결을 허용할 수 있습니다.
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
  1. 외부 패킷 수신을 허용하려면 를 실행하세요 . sysctl -w net.ipv4.conf.enp7s0.route_localnet=1해당 패킷은 .127.0.0.1
  2. iptables-save -c카운터와 함께 전체 규칙 세트를 나열하려면 명령을 사용하는 것이 좋습니다 . nat/PREROUTING최소한 규칙 카운터 가 늘어나는 것을 확인해야 합니다 . 또한 iptables-apply새로운 규칙을 적용하려면 를 사용하세요. 이러한 유틸리티에 대한 설명서를 확인하세요.
  3. tcpdump -ni enp7s0 'tcp port 80'외부 트래픽 문제를 해결하려면 를 사용하세요 .
  4. 로컬에서 발생한 트래픽을 리디렉션하려면 다음 규칙을 사용해야 합니다.
  iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1

그렇지 않으면 서버 자체에서 192.168.29.167 주소를 통해 nginx에 연결할 수 없습니다.

관련 정보