![Linux의 주요 네트워크 인터페이스](https://linux55.com/image/37202/Linux%EC%9D%98%20%EC%A3%BC%EC%9A%94%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4.png)
두 개의 인터페이스가 있는 서버 상자가 있습니다. 한 인터페이스는 내부 네트워크에 연결되고 다른 인터페이스는 외부 네트워크에 연결됩니다.
내부 인터페이스(eth0)에 IP 192.168.1.200을 할당했습니다. 이 IP/인터페이스(cups, nginx, pdns)를 수신하는 일부 로컬 데몬이 있습니다.
외부 IP는 192.168.0.91(eth1)입니다. 여기에는 NAT 가장무도회만 있습니다. 서버 자체에서 서버에 액세스하려고 할 때마다 이상한 일이 발생합니다.
192.168.1.200에 있는 웹 페이지를 열려고 하면 서버가 192.168.0.91 주소를 사용하고 내 권한이 거부됩니다(웹 서버는 보호되며 내부 네트워크의 콘텐츠만 제공합니다).
eth1을 끄면 서버가 제대로 작동하고 내부 IP를 사용합니다. 그러나 eth1을 시작하자마자 즉시 해당 IP를 기본 IP로 만들고 권한이 다시 거부됩니다.
사용할 기본 IP/인터페이스를 명시적으로 설정하려면 어떻게 해야 합니까?
저는 64비트 버전의 Gentoo Linux를 실행하고 있습니다. 두 네트워크 카드의 드라이버는 모듈로 컴파일됩니다. 저는 초기화 시스템으로 systemd를 사용합니다.
편집하다:
답장을 보내주셔서 감사합니다. 하지만 가장 웃긴 부분은 다음과 같습니다.
atomic ~ # cat /etc/resolv.conf
domain local
search local
nameserver 192.168.1.200
atomic ~ # cat /etc/hosts
...
192.168.1.200 atomic ns.atomic.local atomic.local
...
주소 확인이 정상입니다.
atomic ~ # dig atomic.local 192.168.1.200
; <<>> DiG 9.9.4 <<>> atomic.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38797
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;atomic.local. IN A
;; ANSWER SECTION:
atomic.local. 604800 IN A 192.168.1.200
;; Query time: 42 msec
;; SERVER: 192.168.1.200#53(192.168.1.200)
;; WHEN: Tue May 27 13:37:04 EEST 2014
;; MSG SIZE rcvd: 55
wget을 통해 액세스되는 Nginx 로그:
atomic ~ # wget atomic.fhn
--2014-05-27 13:45:58-- http://atomic.local/
Resolving atomic.local... 192.168.1.200
Connecting to atomic.local|192.168.1.200|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
[ <=> ] 0 --.-K/s in 0s
2014-05-27 13:45:58 (0.00 B/s) - ‘index.html’ saved [0]
atomic ~ # tail -n 1 /var/log/nginx/access_log
192.168.0.91 - - [27/May/2014:13:45:58 +0300] "GET / HTTP/1.1" 200 5 "-" "Wget/1.14 (linux-gnu)"
IP/네트워크 필터링을 비활성화했기 때문에 200/OK HTTP 상태가 표시되지만 문제가 아직 해결되지 않았습니다.
라우팅 테이블:
192.168.0.0/30 dev wan proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev lan proto kernel scope link src 192.168.1.200
편집 2:
측정항목을 사용하는 라우팅 테이블:
192.168.0.0/30 dev wan scope link metric 20
192.168.1.0/24 dev lan scope link metric 10
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
broadcast 192.168.0.0 dev wan table local proto kernel scope link src 192.168.0.2
local 192.168.0.2 dev wan table local proto kernel scope host src 192.168.0.2
broadcast 192.168.0.3 dev wan table local proto kernel scope link src 192.168.0.2
broadcast 192.168.1.0 dev lan table local proto kernel scope link src 192.168.1.200
local 192.168.1.200 dev lan table local proto kernel scope host src 192.168.1.200
broadcast 192.168.1.255 dev lan table local proto kernel scope link src 192.168.1.200
답변1
LAN 경로가 WAN 경로보다 우선하도록 해야 합니다. 문제는 여기에 있습니다:
192.168.0.0/30 dev wan proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev lan proto kernel scope link src 192.168.1.200
192.168.0.0/30은 192.168.1.0/24에도 적용됩니다. 따라서 적용 가능한 경우 후자를 선호하도록 TCP/IP 스택에 지시해야 합니다. 그렇지 않으면 무작위로 선택할 수 있습니다(대부분의 구현에서는 항상 첫 번째 것을 사용한다고 예상합니다). 다음 metric
과 같은 매개변수를 사용합니다.
ip route add 192.168.1.0/24 dev lan metric 10
ip route add 192.168.0.0/30 dev wan metric 20
(물론 기존 경로를 먼저 삭제해야 합니다).
답변2
jofel이 이미 말했듯이 Linux에는 마스터 인터페이스라는 것이 없습니다. 실제로 일어나는 일: 컴퓨터가 어딘가로 패킷을 보내려고 하면 대상 IP를 알고 있습니다. 그러나 인터페이스 목록과 라우팅 테이블에서 채워지는 소스 IP도 패킷에 제공되어야 합니다.
로컬 주소의 경우 상황이 좀 더 복잡합니다(그리고 우리가 원하는 만큼 간단하지는 않습니다).
가장 간단한 방법은 URL에 명시적인 192.168.1.200 주소(또는 해당 주소로 정확하게 확인되는 호스트 이름)를 사용하는 것입니다. 작성하지는 않았지만 호스트 이름이 포함된 URL을 사용하여 실제 문서를 가져오고 해당 호스트 이름은 기본적으로 외부 주소로 확인된다고 가정합니다.