젠투 리눅스 서버가 있습니다. 서버는 내부 및 외부의 두 네트워크에 연결됩니다.
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위장됩니다. 지역 교통에서도 같은 일이 발생합니다.루오상호 작용.
iptables
NAT 규칙을 다음과 같이 수정합니다 .
$ iptables -t nat -A POSTROUTING ! -d 192.168.1.0/24 -j MASQUERADE
내 문제가 해결되었습니다!