외부 IP 대신 정의된 로컬 IP를 사용하는 방법

외부 IP 대신 정의된 로컬 IP를 사용하는 방법

젠투 리눅스 서버가 있습니다. 서버는 내부 및 외부의 두 네트워크에 연결됩니다.

Internal network ip: 192.168.1.200
External network ip: 192.168.0.2

서버에서 자체적으로 요청을 시도하면 외부 네트워크 IP를 사용합니다. Wget을 사용하여 nginx에 연결하면 다음과 같은 로깅이 제공됩니다.

server ~ # tail -n 1 /var/log/nginx/error_log
192.168.0.2 - - [27/Aug/2014:19:04:42 +0300] "GET / HTTP/1.1" 200 5 "-" "Wget/1.14 (linux-gnu)"

그럼에도 불구하고 저는 192.168.1.200에 직접 연결했습니다.

server ~ # wget http://192.168.1.200/

라우팅 테이블(메트릭은 외부 네트워크에서 더 높지만 무시되는 것 같습니다): IP 경로 표시

server ~ # ip route
192.168.0.0/30 dev wan  scope link  metric 20 
192.168.1.0/24 dev lan  scope link  metric 10 

IP 경로 획득:

server ~ # ip route get 192.168.1.200
local 192.168.1.200 dev lo  src 192.168.1.200 
    cache <local> 

192.168.0.2 대신 192.168.1.200을 사용하여 이 시스템을 자체적으로 연결하려면 어떻게 해야 합니까?

답변1

실행하는 모든 프로그램에서 이 문제가 발생하면 서버 방화벽 규칙을 확인해야 합니다. NAT외부 대상 에만 사용되는지 확인하세요 . 광범위한 규칙이 있는 경우 라우팅 테이블은 의미가 없습니다 NAT.

방화벽 규칙을 수정한 후 옵션을 사용하여 사용할 인터페이스를 선택할 wget수 있습니다 .--bind-address

wget --bind-address=192.168.1.200 http://192.168.1.200/

~에서wget 문서:

'--바인딩 주소=주소'

클라이언트 TCP/IP 연결을 설정할 때 로컬 컴퓨터의 ADDRESS에 바인딩합니다. ADDRESS는 호스트 이름이나 IP 주소로 지정할 수 있습니다. 이 옵션은 컴퓨터가 여러 IP에 바인딩된 경우 유용합니다.

당신은 그것을 사용할 수 있습니다.wgetrc파일을 영구적으로 만들 수 있습니다.

답변2

iptables내 질문에 대한 의견 중 하나에서 @Patrick이 언급했듯이 NAT 규칙 에 문제가 있습니다 .

  • 이더넷 0: 내부 네트워크, 192.168.1.200
  • eth1:외부 네트워크, 192.168.0.2

내 NAT 규칙은 다음과 같습니다.

$ iptables -t nat -A POSTROUTING ! -o eth0 -j MASQUERADE

이는 장치로 아웃바운드되는 모든 트래픽이 인터페이스가 아님을 의미합니다.이더넷 0위장됩니다. 지역 교통에서도 같은 일이 발생합니다.루오상호 작용.

iptablesNAT 규칙을 다음과 같이 수정합니다 .

$ iptables -t nat -A POSTROUTING ! -d 192.168.1.0/24 -j MASQUERADE

내 문제가 해결되었습니다!

관련 정보