
2つのインターフェースを持つサーバーボックスがあります。あるインターフェイスは内部ネットワークに接続され、もう一方のインターフェイスは外部ネットワークに接続されます。
内部インターフェイス(eth0)にIP 192.168.1.200を割り当てました。このIP /インターフェース(cups、nginx、pdns)を受信するいくつかのローカルデーモンがあります。
外部IPは192.168.0.91(eth1)です。ここにはNAT仮務会だけがあります。サーバー自体からサーバーにアクセスしようとするたびに、奇妙なことが起こります。
192.168.1.200のWebページを開こうとすると、サーバーは192.168.0.91アドレスを使用し、自分の権限が拒否されます(Webサーバーは保護され、内部ネットワークのコンテンツのみを提供します)。
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を使用して実際の文書を取得し、そのホスト名がデフォルトで外部アドレスに解決されるとします。