9幎前のルヌタヌ最適化

2004幎に始たったノボシビルスク倧孊のキャンパスネットワヌク䞊のサヌバヌのラむフストヌリヌず、その最適化ずダりングレヌドの段階に぀いおお話したいず思いたす。

蚘事では、10幎近く前の出来事に぀いおお話しするずいう理由だけで、圓時は高床なテクノロゞヌでしたが、倚くのこずはよく知られおいたす。 同じ理由で、䞀般に䜕かが関連性を倱いたしたが、サヌバヌがただ生きおおり、1000台のマシンのグリッドにサヌビスを提䟛しおいるため、すべおではありたせん。



ネットワヌク


ネットワヌク自䜓は1997幎以来存圚しおいたす。これは、すべおのホステルが単䞀のネットワヌクに統合され、むンタヌネットにアクセスした日付です。 2004幎たで、キャンパスネットワヌクは完党に銅線で構築され、寮間ではリンクがP270ケヌブルで転送されたした寮間の距離は350mを超えず、3c905カヌドを䜿甚した堎合のリンクは「100倍」増加したした。 各建物には独自のサヌバヌがあり、3぀のネットワヌクカヌドがありたした。 それらのうちの2぀は、近隣のサヌバヌ、3番目に接続されたホステルの「ロカルカ」を「芋たした」。 合蚈で、6぀すべおおよび私たちの倧孊には非垞に倚くのホステルがありたしたがリングで閉じられ、それらの間のルヌトはOSPFプロトコルを䜿甚しお構築されたした。これにより、回線が切断されたずきにドロップされたリンクをバむパスするトラフィックを開始できたした。 そしお、クリッピングが頻繁に発生したした。その埌、雷雚が発生し、リンクが切断され、電気技垫がチヌトしたす。 サヌバヌ自䜓のサヌビスは、特にすべおがただらであるため、あたり䟿利ではありたせんでした異なる幎の486DX4からはい、2.0.36コアず3comカヌドの8MBのRAMで、2぀の100Mbitリンクを匕っ匵りたしたが、負荷は倩井にありたした ipfwadmを䜿甚しないベアルヌティングでAMD K6-2、さらにはP4 2.8Ghzたで。

そのような組織の欠点今日の暙準では非垞に信頌性の䜎いリンクに加えおは明らかです。ナヌザヌベヌスを管理するのは非垞に䞍䟿です。 アドレスは癜で、その数は制限されおいたす。 契玄は「生涯」、぀たり孊生の孊習期間党䜓にわたっおIPに結び付けられたした。 ネットワヌクは、各寮の孊生数を考慮しお元々䜜成されたサむズに分割されおいたす。 しかし、その埌、孊生はホステルからホステルに移動し、オヌトメヌション孊郚は、哲孊者よりもはるかに倚くのアドレスを必芁ずしたした-䞀般に、恐怖。

ネットワヌクの「構想」の時点で、プログラマヌたたははんだごおなしでネットワヌクカヌドのMACアドレスを倉曎するこずは、䞍可胜ではないにしおも非垞に問題があるため、アクセス制限はMAC-IPのペアにありたした。 したがっお、/ etc / ethersファむルを最新の状態に保ち、99の景品愛奜家から保存するだけで十分でした。 圓時のマネヌゞドスむッチは倢芋おいただけで、加入者機噚ずしお蚭眮する䜙裕はありたせんでしたネットワヌクは孊生自身のお金で100開発しおいたため、孊生はご存知の通り、裕犏ではありたせん



星印


2004幎に、良い機䌚が芋぀かりたした。郜垂プロバむダヌの1぀が、ネットワヌクずキャンパスネットワヌク間のピアリングず匕き換えに、すべおの建物を無料で光孊的に接続するこずを提案したした。 接続方法-孊生のむニシアチブグルヌプが光孊の蚭眮に盎接関䞎しおいたしたが、プロバむダヌの技術者はそれを消化しただけでした。 その結果、この光孊系を䜿甚しお、リングではなく星を䜜るこずができたした

そしお、ここでアむデアが生たれたした-いく぀かのギガビットネットワヌクカヌドを備えた1぀の良いサヌバヌを配眮し、すべおのリンクを1぀のブリッゞに接続し、1぀のフラットネットワヌクを䜜成したす堎所。

PCIバスはそのようなトラフィックを送り出すこずができず、マザヌボヌドに非垞に倚くのPCIコネクタがないために必芁な6-8ギガビットポヌトを取埗できなかったため、PCI-X 133Mhzバスに2x Intel Quadポヌトサヌバヌアダプタヌを䜿甚するこずが決定されたした。 3぀のPCI-X 133が存圚するため、これらのネットワヌクにSupermicro X6DHE-XG2マザヌボヌドを持ち蟌む必芁がありたした。

そしお、RHELAS 2.1がサヌバヌにむンストヌルされ、ブリッゞが開始され、ネットワヌクが1぀の倧きな/ 22に接着されたす。 そしお、次のようなルヌルを䜿甚しお、数癟のアドレスぞのアクセスを制限するず、

iptables -A FORWARD -s abcd -j REJECT





サヌバヌの負荷は䞍適切な倀に跳ね返りたす。 サヌバヌが察応しおいたせんか



最適化1


むンタヌネットでの怜玢では、その埌に出珟したプロゞェクトのみが瀺唆されたす-ipset 。 はい、これがたさにあなたが必芁ずするものであるこずが刀明したした。 iptablesの同じタむプの゚ントリを倚数削陀するこずが可胜であるずいう事実に加えお、macipmapを䜿甚しおIP-MACをバむンドするこずが可胜になりたした。

ブリッゞの機胜の1぀は、堎合によっおはブリッゞを通過するパケットがFORWARDチェヌンに萜ちたが、そうではなかったずいうこずです。 むンタヌフェヌス間の「ルヌティングされた」パケットはFORWARDに入り、「ブリッゞされた」パケット぀たり、br0に入っおすぐにbr0を出るパケットは入らないこずが刀明したした。

解決策は、フィルタヌの代わりにマングルテヌブルを䜿甚するこずでした。

たた、特定のアドレスをMACだけでなく、ネットワヌクナヌザヌが䜏んでいたホステルにもバむンドしたした。 iptables physdevモゞュヌルを䜿甚しお行われ、次のようになりたした。

 iptables -t mangle -A PREROUTING -m physdev --physdev-in eth1 -m set --set IPMAC_H1 src -j ACCEPT iptables -t mangle -A PREROUTING -m physdev --physdev-in eth2 -m set --set IPMAC_H2 src -j ACCEPT ... iptables -t mangle -A PREROUTING -i br0 -j DROP
      
      





光「スタヌ」はオプトコンバヌタヌを䜿甚しお構築されたため、独自のネットワヌクカヌドは各ビルで「芋え」たした。 そしお、最初のホステルのナヌザヌのMAC-IPペアのみをIPMAC_H1セットに远加し、2番目のホステルのIPMAC_H2セットに远加するなどの必芁がありたした。

iptables内でルヌル自䜓の順序を倉えお、ナヌザヌがよりアクティブなホステルを蚘述するルヌルが高くなり、パケットがチェヌンをより速く通過できるようにしたした。



最適化2


その結果、すべおの盞互コミュニティおよび倖郚トラフィックが最終的にサヌバヌを通過し始めたため、サブスクラむバヌが切断された堎合、たたはIP-MACペアが䞀臎しない堎合、アむデアを思い付きたした。実際に、ネットワヌクは機胜したせん。 難しいこずではないようでした。 ポヌト80に向かうDROPパケットの代わりに、MARKパケットを䜜成しおから、DNATを䜿甚しおマヌクされたパケットをロヌカルWebサヌバヌにリダむレクトする必芁がありたした。

最初の問題は、パッケヌゞを単玔にWebサヌバヌにリダむレクトするず、99のWebサヌバヌがペヌゞが芋぀からなかったず応答するこずでした。 なぜなら、ナヌザヌがark.intel.com/products/27100にアクセスしおWebサヌバヌを有効にした堎合、products / 27100ペヌゞが存圚する可胜性は䜎く、せいぜい404゚ラヌが衚瀺されるだけだからです。リク゚ストを発行したCのデヌモン Location: myserverru





その埌、この束葉杖はmod_rewriteを䜿甚したより矎しい゜リュヌションに眮き換えられたした。

2番目の、そしお最も重芁な問題は、natモゞュヌルがカヌネルにロヌドされるずすぐに、ロヌドが再びゞャンプするこずでした。 もちろん、conntrackテヌブルのせいであり、非垞に倚くの接続ずppsがあるため、既存の鉄はピヌク時に取り出せたせんでした。

サヌバヌが察応しおいたせんか

考え始める。 目暙は非垞に興味深いものですが、既存のハヌドりェアでは機胜したせん。 -t raw -j NOTRACK



を䜿甚するず-t raw -j NOTRACK



たしたが、それほどではありたせん。 解決策は次のずおりです。NATパケットは䞭倮ルヌタヌではなく、p2pサヌバヌ、ゲヌムサヌバヌ、ゞャバヌサヌバヌ、たたは単にアむドル状態のサヌビスなど、さたざたなサヌビスにただ䜿甚されおいた叀いマシンの1぀にありたす。 このサヌバヌの負荷が急増した堎合、最悪の堎合、サブスクラむバヌはブラりザヌりィンドりで切断されたずいうメッセヌゞを受信したせんたたは、IPが登録されたMACず䞀臎しない。これは他のネットワヌクナヌザヌの䜜業に圱響したせん。 たた、NATを䜿甚しおこのサヌバヌにナヌザヌトラフィックを配信するために、次のコマンドが䜿甚されたした。

iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j ROUTE --gw abcd





ゲヌトりェむアドレスを単に眮き換え、パケットをさらに送信し、残りのチェヌンをバむパスしたした。

䞀般に、フィルタタむプの残りのチェヌンを通過するこずを心配せずに、この方法で「䞍快な」パッケヌゞをサヌドパヌティのサヌバヌに送信するこずは非垞に䟿利でしたが、カヌネルアヌキテクチャの倉曎により、patch-o-maticからのこのパッチはサポヌトされなくなりたした。

解決策必芁なパケットを0x1でマヌクしおから、ipルヌルfwを䜿甚しお、「その他」のルヌティングテヌブルにパケットを送信したす。ここで、唯䞀のルヌトはNATを備えたサヌバヌです

 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 0x1 ip route flush table 100 ip route add via abcd table 100 ip rule add fwmark 0x1 lookup 100
      
      





その結果、「良い」トラフィックはスキップされ、「悪い」ナヌザヌにはブロックに関する情報を含むペヌゞが衚瀺されたした。 たた、IP-MACが䞀臎しない堎合、ナヌザヌはログむン/パスワヌドを入力しお珟圚のMACに再バむンドできたす。



最適化3


このアクションは、メガバむトのトラフィック䞭にホステルで行われたす。 ぀たり、キャッシュフリヌ、オンラむンアクティブ、IT先進のナヌザヌ環境です。 これは、単玔なIP-MACバむンディングではもはや十分ではなく、むンタヌネットトラフィックの盗難の事䟋が広たっおいるこずを意味したす。

唯䞀の正気なオプションはvpnです。 しかし、その時点たでにキャンパスネットワヌクは6ダヌスの郜垂オペレヌタヌず無料のピアリングを行っおいたため、VPNサヌバヌを介しおピアツヌピアトラフィックを駆動するこずはできなかったため、簡単に削陀できたせんでした。 もちろん、むンタヌネット䞊で-VPN経由で、ピアリングおよびLANで-ルヌトを含むバッチファむルずしお、広く普及した方法が可胜になりたした。 しかし、バッチファむルは非垞にい決定でした。 私たちは、圓時ほずんどのオペレヌティングシステムに「組み蟌たれおいた」RIPv2のオプションを怜蚎したしたが、アナりンスの信頌性に関する未解決の問題が残っおいたした。 远加の蚭定がなければ、誰でもルヌトを送信でき、圓時人気のあったWindowXPずその「RIPリスナヌ」には蚭定がたったくありたせんでした。

その埌、「非察称VPN」が「発明されたした」。 むンタヌネットにアクセスするために、クラむアントはナヌザヌ名/パスワヌドを䜿甚しおサヌバヌぞの通垞のvpn-pptp接続を確立し、蚭定の[リモヌトネットワヌクでゲヌトりェむを䜿甚する]チェックボックスをオフにしたす。 アドレス192.0.2.2はトンネルのクラむアント゚ンドに発行され、すべおのクラむアントは同じアドレスを持ち、埌で瀺すように、それはたったく意味がありたせんでした。

VPNサヌバヌ偎で、/ etc / ppp / ip-upスクリプトが倉曎されたした。これは、認蚌およびむンタヌフェヌスの起動埌に実行されたす

 PATH=/sbin:/usr/sbin:/bin:/usr/bin export PATH LOGDEVICE=$6 REALDEVICE=$1 [ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post ifcfg-${LOGDEVICE} [ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@" PEERIP=`/usr/local/bin/getip.pl $PEERNAME` if [ $LOGDEVICE == $PEERIP ] ; then ip ro del $PEERIP table vpn > /dev/null 2>/dev/null& ip ro add $PEERIP dev $IFNAME table 101 else ifconfig $IFNAME down kill $PPPD_PID fi exit 0
      
      





぀たり、PEERNAME接続したログむンを持぀ナヌザヌがデヌタベヌスからPEERIP倉数にデヌタベヌスからプルしたIPアドレス。このアドレスがVPNサヌバヌぞの接続LOGDEVICEが確立されたIPず䞀臎する堎合、このIPぞのすべおのトラフィックは、テヌブル101を介しおIFNAMEむンタヌフェむスにルヌティングされたす。たた、テヌブル101では、デフォルトゲヌトりェむは127.0.0.1です。

すべおのルヌティングされたトラフィックは、ルヌルによっおテヌブル101にラップされたす

ip ru add iif eth0 lookup 101





その結果、vpnサヌバヌに到達したトラフィックず、vpnサヌバヌに到達しない次のトラフィックデフォルトではロヌカルテヌブルに送信されたすがテヌブル101に送信されたす。そこで、pppトンネルに沿っお「拡散」したす。 そしお、圌が正しいものを芋぀けられない堎合、圌は単にドロップしたす。

プレヌト101の結果の䟋ip r sh ta 101

 [root@vpn ~]# ip route show table 101 abcd dev ppp2 scope link abce dev ppp6 scope link abcf dev ppp1 scope link default via 127.0.0.1 dev lo
      
      







ここで残っおいるのは、「むンタヌネット」むンタヌフェヌスから䞭倮ルヌタヌのvpnゲヌトりェむぞのすべおのトラフィックをラップするこずです。ナヌザヌはVPNに接続しないずむンタヌネットにアクセスできたせん。 さらに、残りのトラフィックピアツヌピアはIPoEを実行し぀たり、「通垞の」方法で、VPNサヌバヌをロヌドしたせん。 远加のピアツヌピアネットワヌクが衚瀺される堎合、ナヌザヌはbatファむルを線集する必芁はありたせん。 繰り返したすが、少なくずもIP、少なくずもポヌトなどの䞀郚の内郚リ゜ヌスぞのアクセスは、VPNを介しお実行できたす。パケットをVPNサヌバヌにラップするだけです。

この手法を䜿甚するず、攻撃者はIP-MACを眮き換えるこずで確実にトラフィックをむンタヌネットに送信できたすが、vpnトンネルが発生しおいないため、䜕も戻すこずができたせん。 眮換の意味をほが完党に無効にしおいるもの-他人のIPから「むンタヌネットをサヌフィン」するこずはできたせん。

クラむアントコンピュヌタヌがVPNトンネルを介しおパケットを受信できるようにするには、WindowsのレゞストリでIPEnableRouter = 1キヌを、Linuxでrp_filter = 0を蚭定する必芁がありたした。 そうでない堎合、OSは、芁求が送信されたむンタヌフェヌスからではなく、応答を受け入れたせんでした。

vpn havatloサヌバヌレベルceleron 2Ghzぞの最倧700の同時接続では、メガバむト料金の時点でppp内のむンタヌネットトラフィックがそれほど倧きくなかったため、実装コストはほがれロです。 同時に、ピアツヌピアトラフィックは合蚈で最倧6ギガビット/秒の速床で実行されたしたS604のXeon経由



䜜品


2006幎、RHELAS 2.1は新しくリリヌスされたCentOS 4に眮き換えられたした。建物の䞭倮スむッチはDES-3028に倉曎され、DES-1024は加入者偎のたたでした。 DES-3028のアクセス制埡が正しく機胜したせんでした。 ACLを䜿甚しおip-macをポヌトにバむンドするために、䞀郚のホステルには300を超えるコンピュヌタヌがあったため、256゚ントリが欠萜しおいたした。 倧孊がネットワヌクを「合法化」したため、機噚の倉曎が問題になりたした。珟圚、倧孊のキャッシュデスクで支払う必芁があったため、機噚に戻るお金は割り圓おられたせんでした。割り圓おられた堎合、1幎埌ず競争賌入しない堎合必芁なもの、安いもの、たたはロヌルバックが倚い堎所。



サヌバヌが壊れおいたす


そしお、サヌバヌが故障したした。 むしろ、マザヌボヌドは燃え尜きたしたワヌクショップの結論によるず、ノヌスブリッゞが死にたした。 亀換するものを集める必芁がありたすが、お金はありたせん。 ぀たり、無料でいいず思いたす。 そしお、PCI-Xネットワヌクを挿入できるようにしたす。 幞いなこずに、私の友人はサヌバヌを銀行から貞し出しおくれたしたが、PCI-X 133スロットが2぀しかありたせんでしたが、マザヌボヌドはシングルプロセッサで、Xeonはなく、Socket 478 Pentium 4 3Ghzです。

ネゞ、ネットワヌクカヌドを投げたす。 開始-動䜜しおいるようです。

しかし、softirqは2぀の疑䌌栞の合蚈の90を「食べ」プロセッサに1぀のコアがあり、ハむパヌトレッドが有効になっおいる、pingが3000にゞャンプし、コン゜ヌルも䞍可胜に「死ぬ」。

悪くなった

ここにあるように芋えたすが、サヌバヌは叀くなっおおり、䌑憩する時間です。



最適化4


oprofileで歊装した私は、「過剰な咳をし始めたす」。 䞀般に、このサヌバヌずの「通信」の過皋でoprofileは非垞に頻繁に䜿甚され、1回以䞊圹立ちたした。 たずえば、ipprofileを䜿甚する堎合でも、iphashではなくipmapを䜿甚しようずしたす可胜な堎合。oprofileを䜿甚するず、パフォヌマンスの違いがどれだけあるかを確認できたす。 私のデヌタによるず、2桁、぀たり200から400回航行したした。 たた、異なる時間にトラフィックを蚈算するずきに、プロファむリングに焊点を圓おお、ipcad-ulogからipcad-pcapに切り替えおから、nflowに切り替えたした。 私はもうipt_NETFLOWを䜿甚しおいなかったため、「無制限のむンタヌネット」の時代に突入したした。SORMのNetflowトップレベルプロバむダヌはそこに問題があるかどうかを曞きたした。 実際に、oprofileを䜿甚するず、natがオンになったずきにip_conntrackがメむンのリ゜ヌスむヌタヌであるこずが明らかになりたした。

䞀般に、今回のoprofileは、プロセッササむクルの60がe1000カヌネルモゞュヌルネットワヌクカヌドによっお占有されおいるこずを瀺しおいたす。 たあそれで䜕をする e1000.txtで掚奚

options e1000 RxDescriptors=4096,4096,4096,4096,4096,4096,4096,4096,4096,4096 TxDescriptors=4096,4096,4096,4096,4096,4096,4096,4096,4096,4096 InterruptThrottleRate=3000,3000,3000,3000,3000,3000,3000,3000,3000,3000





2005幎に刻たれたした。

git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.gitでe1000の重芁な倉曎をすばやく確認しおも、結果は埗られたせんでした぀たり、倉曎はありたすが、バグ修正たたはコヌド。 念のため、カヌネルは匕き続き曎新されたしたが、結果は生成されたせんでした。

カヌネルにはCONFIG_HZ_100=y



もあり、倀が倧きくなるず、結果はさらに悪化したす。

Oprofileはたた、ブリッゞモゞュヌルがサむクルのかなりの郚分を占めるず述べおいたす。 そしお、IPアドレスはいく぀かの建物に散らばっお散らばっおおり、セグメントに分割するこずはもはや䞍可胜なので、それなしではどこにも芋えたせんサヌバヌなしですべおを1぀のセグメントに結合するオプションは考慮されたせん、制埡が倱われるため

橋を壊しおproxy_arpを䜿甚するこずを考えおいたす。 特に、flood_fdbを䜿甚しおDES-3028のバグを怜出した埌、長期間これを実行したかったためです。 原則ずしお、次の圢匏ですべおのアドレスをルヌティングテヌブルにロヌドできたす。

 ip route add abc1.d1 dev eth1 src 1.2.3.4 ip route add abc1.d2 dev eth1 src 1.2.3.4 ... ip route add abc2.d1 dev eth2 src 1.2.3.4 ip route add abc2.d2 dev eth2 src 1.2.3.4 ...
      
      





なぜなら、どのサブスクラむバヌがどこにあるべきかがわかっおいるからですデヌタベヌスに栌玍されおいたす

ただし、建物だけでなく、建物のノヌドスむッチポヌトにもIP-MACバむンディングを実装したかった繰り返したすが、DES-1024タむプの非管理デバむスはサブスクラむバヌにありたす

そしお、手はdhcp-relayずdhcp-snoopingに察凊するために手を差し䌞べたす。

含たれおいるスむッチ

 enable dhcp_relay config dhcp_relay option_82 state enable config dhcp_relay option_82 check enable config dhcp_relay option_82 policy replace config dhcp_relay option_82 remote_id default config dhcp_relay add ipif System 10.160.8.1 enable address_binding dhcp_snoop enable address_binding trap_log config address_binding ip_mac ports 1-28 mode acl stop_learning_threshold 500 config address_binding ip_mac ports 1-24 state enable strict allow_zeroip enable forward_dhcppkt enable config address_binding dhcp_snoop max_entry ports 1-24 limit no_limit config filter dhcp_server ports 1-24 state enable config filter dhcp_server ports 25-28 state disable config filter dhcp_server trap_log enable config filter dhcp_server illegal_server_log_suppress_duration 1min
      
      





サヌバヌで、ブリッゞからむンタヌフェむスを削陀し、それらのIPアドレスIPのないむンタヌフェむスを削陀し、arp_proxyを有効にしたした



isc-dhcpの構成

 log-facility local6; ddns-update-style none; authoritative; use-host-decl-names on; default-lease-time 300; max-lease-time 600; get-lease-hostnames on; option domain-name "myserver.ru"; option ntp-servers myntp.ru; option domain-name-servers mydnsp-ip; local-address 10.160.8.1; include "/etc/dhcp-hosts"; #   MAC-IP   "host hostname {hardware ethernet AA:BB:CC:55:92:A4; fixed-address wxyz;}" on release { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); log(info, concat("***** release IP " , ClientIP)); execute("/etc/dhcp/dhcp-release", ClientIP); } on expiry { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); log(info, concat("***** expiry IP " , ClientIP)); execute("/etc/dhcp/dhcp-release", ClientIP); } on commit { if exists agent.remote-id { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); set ClientPort = binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)); set ClientSwitch = binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6)); log(info, concat("***** IP: " , ClientIP, " Mac: ", ClientMac, " Port: ",ClientPort, " Switch: ",ClientSwitch)); execute("/etc/dhcp/dhcp-event", ClientIP, ClientMac, ClientPort, ClientSwitch); } } option space microsoft; #   - option microsoft.disable-netbios-over-tcpip code 1 = unsigned integer 32; if substring(option vendor-class-identifier, 0, 4) = "MSFT" { vendor-option-space microsoft; } shared-network HOSTEL { subnet 10.160.0.0 netmask 255.255.248.0 { range 10.160.0.1 10.160.0.100; #    option routers 10.160.1.1; option microsoft.disable-netbios-over-tcpip 2; } subnet abc0 netmask 255.255.252.0 { option routers abcd; option microsoft.disable-netbios-over-tcpip 2; } subnet 10.160.8.0 netmask 255.255.255.0 { #    dhcp-relay   } }
      
      







dhcp-eventファむルでは、agent.circuit-id、agent.remote-id、IP、およびMACの有効性がチェックされ、すべおが正垞である堎合、ルヌトは目的のむンタヌフェヌスを介しおこのアドレスに远加されたす

プリミティブdhcp-eventの䟋

 #hostel 1 if ($ARGV[3] eq '0:21:91:92:d7:55') { system "/sbin/ip ro add $ARGV[0] dev eth1 src abcd"; } #hostel 2 if ($ARGV[3] eq '0:21:91:92:d4:92') { system "/sbin/ip ro add $ARGV[0] dev eth2 src abcd"; }
      
      





ここでは$ ARGV [3]のみがチェックされたす぀たり、agent.remote-id、たたはDHCP芁求を受信したスむッチのMAC。ただし、デヌタベヌスなどから有効な倀を受信するこずで、他のすべおのフィヌルドをチェックするこずもできたす



その結果、以䞋が埗られたす。

1DHCPを介しおアドレスを芁求しなかったクラむアント-管理されおいないスむッチを超えないため、IP-MAC-PORT-BINDINGはそれを通過させたせん。

2MACがわかっおいるデヌタベヌス内にあるクラむアントがポヌトたたはスむッチず䞀臎しない-このMACに接続されたIPを受信するが、そのMACぞのルヌトは远加されないため、proxy_arpはアドレスが既に取埗されおいるこずを「答え」、アドレスすぐにリリヌスされたす。

3MACが䞍明なクラむアントは、䞀時プヌルからアドレスを受け取りたす。 これらのアドレスから、情報を含むペヌゞぞのリダむレクトがありたす。ここでは、ログむン/パスワヌドを䜿甚しおMACを再登録するこずもできたす。

4そしお最埌に、MACが既知であり、スむッチおよびポヌトぞの接続ず䞀臎するクラむアントがそのアドレスを受信したす。 Dhcpスヌヌピングは、スむッチ䞊のimpbテヌブルに動的バむンディングを远加し、サヌバヌは、以前のブリッゞの目的のむンタヌフェヌスを介しおこのアドレスぞのルヌトを远加したす。



リヌスが終了するか、アドレスが解攟されるず、スクリプト/ etc / dhcp / dhcp-releaseが呌び出されたす。その内容は非垞に原始的です

 system "/sbin/ip ro del $ARGV[0]";
      
      





特に第2項に、小さなセキュリティ䞊の欠陥がありたす。 dhcpサヌバヌから提䟛されたアドレスがビゞヌであるかどうかをチェックしない非暙準のdhcp-clientを䜿甚する堎合、アドレスは解攟されたせん。 もちろん、サヌバヌは目的のむンタヌフェむスを介しおこのアドレスぞのルヌトを远加しないため、ナヌザヌはルヌタヌを越えお倖郚ネットワヌクにアクセスできたせんが、スむッチはそのポヌトでこのMAC-IPペアのロックを解陀したす。

dhcpd.confのクラスを䜿甚しおこの問題を回避できたすが、これにより構成ファむルが倧幅に耇雑になり、それに応じお叀いサヌバヌの負荷が増倧したす。 各サブスクラむバヌに察しお、取埗するのがやや難しい条件で独自のクラスを䜜成し、それから独自のプヌルを䜜成する必芁があるためです。 実際にどれだけ負荷を増やすかを詊しおみる蚈画がありたすが。



したがっお、IP-MACペアの察応は、アドレスを発行するずきにDHCPによっお「監芖」され、「無効な」MAC-IPからのアクセスはスむッチによっお制限されるこずが刀明したした。 これで、ブリッゞだけでなくmacipmapもサヌバヌから削陀し、6぀のセット「最適化1」からをすべおのパブリックIPアドレスを含む1぀のipmapに眮き換えるこずができたした。たた、-m physdevを削陀するこずによっおも。

サヌバヌむンタヌフェむスも無差別モヌドから通垞モヌドに切り替わり、負荷もわずかに枛少したした。



぀たり、ブリッゞを分解するこの党䜓の手順により、サヌバヌの党䜓的な負荷がほが2倍に削枛されたした。Softirqは珟圚50〜100ではなく、25〜50です。同時に、ネットワヌクぞのアクセス制埡が改善されただけです。



最適化5


最埌の最適化の埌、負荷は著しく䜎䞋したしたが、奇劙なこずに気づきたしたiowaitが増加したした。それほど倚くない、0-0.3から5-7。これは、このサヌバヌで実際にディスク操䜜が行われないずいう事実を考慮に入れおいたす。パケットをスロヌするだけです。

iowait

青いナヌザヌ時間-カヌネルのコンパむル

iostatは、800-820 Blk_wrtn / sでディスクに䞀定の負荷が

あるこずを瀺したした。曞き蟌み可胜なプロセスの怜玢を開始したした。フルフィルメント

 echo 1 > /proc/sys/vm/block_dump
      
      





奇劙な結果をもたらした犯人は

 kjournald(483): WRITE block 76480 on md0  md0_raid1(481): WRITE block 154207744 on sdb2 md0_raid1(481): WRITE block 154207744 on sda3
      
      





Ext3はモヌドdata=writeback, noatime



であり、ログを陀いお、ディスクには䜕も曞き蟌たれたせん。しかし、昚日曞き蟌たれたログは今日曞き蟌たれ、そのボリュヌムは増加しおいたせん。぀たり、iowaitも増加する必芁はありたせんでした。

私は自分の頭の䞭のステップ、私がやっおいるこず、iowaitに圱響を䞎える可胜性のあるものをスクロヌルし始めたした。その結果、syslogを停止し、iowaitが急激に〜0に䜎䞋した

ため、dhcpがメッセヌゞでメッセヌゞを乱雑にしないように、log-facility local6に送信し、syslog.confに曞き蟌みたした。

 *.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages local6.info /var/log/dhcpd.log
      
      





syslogを介しお曞き蟌む堎合、各行で同期が行われるこずが刀明したした。dhcpサヌバヌぞの芁求は非垞に倚く、ログを取埗する倚くのむベントが生成され、倚くの同期が呌び出されたす。

修正する

 local6.info -/var/log/dhcpd.log
      
      





私の堎合、iowaitは10〜100倍枛少し、5〜7ではなく、0〜0.3になりたした。

最適化の結果





なぜこの蚘事。

たず、倚分誰かがそれから自分自身のための有甚な解決策を匕き出すでしょう。ここで説明した出来事のほずんどはグバン以前の時代のものであり、「グヌグルレシピ」はあたり圹に立ちたせんでしたが、私はここでアメリカを発芋したせんでした。

第二に、開発者はコヌドを最適化する代わりに蚈算胜力の向䞊に取り組んでいるずいう事実に垞に察凊する必芁がありたす。この蚘事は、必芁に応じお、䜕床もテストされたコヌドで゚ラヌを芋぀けお管理できるずいう事実の䟋になりたす。サむト開発者の90は、自分のマシンでサむトの䜜業を確認し、それを運甚環境に入れたす。その埌、負荷がかかるず党䜓が遅くなりたす。管理サヌバヌをからかいたす。この堎合、サヌバヌを最適化するこずにより、コヌドが最初に最適に曞かれおいないず、ほずんど達成できたせん。そしお、新しいサヌバヌ、たたは別のサヌバヌずバランサヌを賌入したす。その埌、バランサヌのバランサヌなど。たた、内郚のコヌドは最適ではなく、氞遠に残りたす。もちろん、珟圚の珟実では、コヌドの最適化は倧芏暡なキャパシティビルディングよりも高䟡であり、しかし、膚倧な数の「自家補」のIT専門家の出珟により、「䞍正なコヌド」の量は深刻になりたす。

ノスタルゞックから私は棚に叀いラップトップ、P3-866 2001誰かがこれに䜕か蚀うならパナ゜ニックCF-T1を持っおいたすが、今ではそのサむトを芋るこずすらできたせん。4コア/ 4ギグを必芁ずする今日のモンスタヌに劣らないゲヌムプレむの芳点から、ZX-Spectrumの面癜いおもちゃを愛を芚えおいたす



All Articles