私のオフィスネットワークには、2つのインターネット接続と1つのCentOSサーバーがWebサイト(ポート443のHTTPS)を実行しています。 Webサイトは、最初のインターネット接続(ISP-1)のパブリックIPを介してパブリックにアクセスできる必要があります。もう1つのインターネット接続であるISP-2は、ネットワーク上のデフォルトゲートウェイです。どちらのインターネット接続にも、NAT、SPIファイアウォールなど)を備えたルーター(家庭用)があります。ISP-2のルーターは、元のファームウェアを備えたNetgear WNDR3700(別名N600)です。
問題は、Webサイトにアクセスできないことです。 ISP-1の着信トラフィックはサーバーに到達するように見えますが、戻りトラフィックはISP-2を経由してルーティングされるため、事実上サイトに到達できなくなります。私が知る限り、WNDR3700でポートベースのルーティングを行うことはできません。
これを機能させるための私のオプションは何ですか?サーバー自体にiptables /ルーティングベースのソリューションを実装することを検討してきましたが、それを機能させることができませんでした。
更新:サーバーには、両方のルーターに接続する1つのネットワークインターフェイスがあることに注意してください。
私があなたの意図を正しく理解しているなら、あなたはあなたのウェブサーバーが通常ISP-2を発信トラフィックのデフォルトゲートウェイとして使用することを望みます。ただし、外部のウェブリクエストへの応答は例外です。ポリシールーティングを使用したソリューションのスケッチを次に示します。
echo "101 webtraffic" >> /etc/iproute2/rt_tables
ip route add default table webtraffic via $ISP1_GW_LAN_IP
ip rule add fwmark 1 table webtraffic
iptables -t mangle -A OUTPUT -d \! $LAN_NET_PREFIX \
-p tcp -m tcp --sport 443 \
-j MARK --set-mark 1
どこ:
LAN_NET_PREFIX
はLANのネットワークプレフィックス(例:192.168.100.0/24)であり、ISP1_GW_LAN_IP
は、ISP-1へのゲートウェイのLAN IPアドレスです(例:192.168.100.100)。最初のip
コマンドは、webtraffic
テーブルのデフォルトルートをISP-1ゲートウェイに設定し、2番目のコマンドは、1
とマークされたパケットがwebtraffic
テーブルを使用してルーティングされるようにします。最後に、iptables
ルールは適切な発信パケットをマークし、それらのネクストホップがISP-1に向かうことを保証します。
これは、実験的なiptables
モジュールであるROUTEターゲットを使用する代替ソリューションです。
iptables -t mangle -A POSTROUTING -d \! $LAN_NET_PREFIX \
-p tcp -m tcp --sport 443 \
-j ROUTE --gw $ISP1_GW_LAN_IP
このルールは、発信Web応答パケットのルーティング決定を上書きし、デフォルトのISP-2ではなくISP-1ゲートウェイに送信します。 LAN上のクライアントへのWeb応答を含む、他のすべてのトラフィックは影響を受けません。コメントで指摘されているように、ROUTEターゲットは、カーネルに明示的にパッチを適用していないシステムには実装されない可能性が非常に高いです 実験的であるため 。
同じ問題が発生しましたが、iproute2(ソースルーティング)でのみ解決しました。 iptablesでマークする必要はありませんでした:
echo "101 webtraffic" >> /etc/iproute2/rt_tables
ip route add default table webtraffic via $ISP1_GW_LAN_IP
ip rule add from $ISP1_IP table webtraffic
重要なのは、WebだけがISP1接続を使用できるわけではないということです。あなたが選ぶことができます。誰かが失敗した場合、両方の接続からsshからサーバーに接続できるので便利です。 CentOSユーザーとして、再起動後に変更が失われないように、次のファイルを作成しました。
echo "default table webtraffic via $ISP1_GW_LAN_IP" >> /etc/sysconfig/network-scripts/route-eth1
echo "from $ISP1_IP table webtraffic" >> /etc/sysconfig/network-scripts/rule-eth1
これは非同期ルーティングと呼ばれます。 WebサーバーのデフォルトゲートウェイがISP-1上のルーターのIPアドレスを指すようにする必要があります。 Webサーバーにアクセスしているクライアントが同じIPから来ている場合は、デフォルトゲートウェイを変更せずにこれをルーティングできます。または、ISP1ゲートウェイにNATを実装して、リバースプロキシのように機能し、次に、Webサーバーにルーティングします。よろしくお願いします。
ファイアウォールの人々は、この問題を克服するためにNAT内で実行します。インバウンド接続は、インターフェイスアドレス内のファイアウォールに接続されているため、サーバーでのルーティングの問題はありません。
両方のインバウンド接続が同じIPの同じインターフェイスで終了する場合、オプションは非常に限られています(なし?)。同じコンピューター/インターフェイスに対して別のIPを取得でき、1つのIPに1つのインバウンド接続があり、別のIPにアノテートインバウンドがあるかどうかを確認します。この後、ソースルーティングを簡単に行うことができます。
異なるソースを異なるIPアドレスに接続できない場合は、iptables macを使用して、パケットの送信元のMACに応じてパケットをリダイレクトできます。
[!] --mac-source address
Match source MAC address. It must be of the form
XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets
coming from an Ethernet device and entering the PREROUTING, FOR‐
WARD or INPUT chains.
お役に立てれば。
Webサーバーがワークステーションと同じサブネット上にあると仮定して、内部でyourwebsite.comが内部IPアドレスに解決されるように、分割DNSを設定してみませんか?確かに複雑な非同期ルーティングを打ち負かします。
また、複数のWAN接続をサポートできるよりもルーターに投資することで、作業が大幅に楽になります(また、両方のインターネット接続間で負荷分散/フェイルオーバーを実行できます)。