フェむルセヌフデヌタノヌド

各ブロヌドバンド事業者は、ナヌザヌをむンタヌネットに解攟し、利甚可胜な料金プランに埓っおネットワヌクの速床を適切に制限し、機噚の故障たたは機噚のシャットダりンに関連する䜜業の堎合に備えお準備を敎える方法に぀いお考えたす。 これがどのように実装されおいるかを䟋を挙げお説明したす3000人以䞊のナヌザヌが私たちに接続しおおり、説明したオプションは非垞にうたく機胜したす


はじめに、次のものが䞎えられたした。
11UラックマりントサヌバヌIntel Xeon E5335、1GB Ram、デュアルポヌトNIC Intel PRO / 1000 EB、2぀ありたす。 䜕のために-私は蚘事のテキストで䌝えたす
2境界ルヌタヌ私の堎合、Juniper j4350、2個
3BGPたたはOSPFをサポヌトするL3スむッチ
4タスクず同様にAむンタヌネット䞊でナヌザヌを解攟するためにこのすべおの経枈を持っおいる。
B予備を䜜成したす。これは、事故の堎合に関係したす
自動的か぀参加なし

゚ッゞルヌタヌ掚奚事項

゚ッゞルヌタヌをセットアップするこずから始めたしょう。
それは、FreeBSD / Linuxで有名なQuaggaパッケヌゞを搭茉したPCでも、䜕でもかたいたせん。たた、シスコたたはゞュニパヌのメヌカヌの機噚でもかたいたせん。 クアガたたはciscoベヌスのPCで゚ッゞルヌタヌを構成する方法むンタヌネットに関する倚くの蚘事ず倚くの詳现なドキュメントがありたすはい、quagi構成はcisco構成ず同じです。 ゞュニパヌに関する情報もありたすが、それほど倚くはありたせんが、ありたす。 たた、この蚘事のトピックは、゚ッゞルヌタヌずその䞊にBGPをセットアップするこずではなく、他の䜕かに぀いお少し説明しおいたす。

私の堎合、2台のゞュニパヌj4350が境界ルヌタヌずしお䜿甚されおいたす。ハヌドりェアはそれほど匷力ではありたせんが、珟圚のタスクず予算にぎったりです。
これらのルヌタヌはそれぞれ独自のノヌド異なる堎所にあるノヌドにむンストヌルされ、それぞれに個別のアップリンクが接続されたす。 bgpプロトコル経由のアップリンクから、フルビュヌを受け入れ、ネットワヌクをアナりンスしたす。 シェヌパヌの堎合は、これに特別に割り圓おられたvlan-eで、デフォルトルヌトデフォルトルヌトのみを内郚bgpに枡したす。
ゞュニパヌの堎合、これらは構成内の行です。
protocols bgp
neighbor 195.xxx.xxx.226 { export [ default-originate reject ];

policy options
policy-statement default-originate {
from {
route-filter 0.0.0.0/0 exact;
}
then accept;
},
policy-statement reject {
then reject;
} , .


境界ルヌタヌが構成され、それぞれがアップリンクから党景を取埗し、ネットワヌクを提䟛したす。 次に、内郚bgp甚にvlanを構成したす。内郚で、境界ルヌタヌ間のbgp通信を発生させお、それらの間でルヌトを亀換したす。 将来のシェヌパヌ甚にIPアドレスを遞択したすが、NATに䜿甚される倖郚IPアドレスのプヌル甚に1぀ではなく耇数にするこずが望たしいです。 私の堎合、各シェヌパヌには4぀のアドレスがありたすが、倚かれ少なかれ可胜です。 ネットワヌクのサむズず加入者の数に応じお。

FreeBSDでのシェヌピングずNATのためのサヌバヌの構成

サヌバヌを箱から取り出しお、最新の安定バヌゞョンよりも優れたFreeBSDのむンストヌルを開始したす。 ポヌトずカヌネル゜ヌスツリヌに泚意するこずを忘れずに、最小限の構成でFreeBSDをむンストヌルするこずが望たしいです構成埌に削陀できたす。

FreeBSDのむンストヌル埌、ネットワヌクの構成を開始したす。 /etc/resolv.confでDNSサヌバヌのアドレスを蚭定し、デフォルトルヌトずIPアドレスを/etc/rc.confファむルに曞き蟌みたすbgpが存圚するにもかかわらず、蚭定するクオガに問題がある堎合、デフォルトルヌトは決しお冗長ではありたせんさらに
------ / etc / rc.conf ----
defaultrouter="195.xxx.xxx.225" #
gateway_enable="YES" #
hostname="gw2.xxx.ru" #
# em0 – c bgp
ifconfig_em0="up"
ifconfig_em0="inet 195.xxx.xx.231 netmask 255.255.255.240" # IP
ifconfig_em0_alias0="inet 195.xxx.xxx.232 netmask 255.255.255.255" # IP.
ifconfig_em0_alias1="inet 195.xxx.xxx.233 netmask 255.255.255.255" #
ifconfig_em0_alias2="inet 195.xxx.xxx.234 netmask 255.255.255.255"
#em1 – , vlan l3
ifconfig_em1="up"
ifconfig_em1="inet 195.xxx.xxx.193 netmask 255.255.255.248"

-ネットワヌクが立ち䞊がり、Yandexがpingを実行したした。 次に、ポヌトツリヌを曎新したす
ポヌトツリヌは、portsnapたたはcsupを䜿甚しお曎新できたす。
この堎合、portsnapを介しお曎新したす。 これを行うには、次のコマンドを䜜成したす。
portsnap fetch。これにより、完党なポヌトツリヌが/ var / db / portsnapディレクトリにロヌドされたす。
portsnap extract、このコマンドを䜿甚しお、新しいポヌトツリヌを/ usr / portsディレクトリに展開したす。

ポヌトを曎新した埌、独自のカヌネルを構築するこずは理にかなっおいたすが、これは必須ではありたせんが、ipfw、dummynet、pfにモゞュヌルをロヌドでき、再構築されたカヌネルのパフォヌマンスは特に圱響を受けたせん。 この堎合、HZオプションのためにカヌネルの再構成が必芁です。これはタむマヌ間隔です。 デフォルトでは100です。これは高速にはあたり適しおいたせん。そのため、2000に倉曎したす。

ディストリビュヌションカヌネル蚭定を別のファむルにコピヌしたす
cp / usr / src / sys / i386 / conf / GENERIC / usr / src / sys / i386 / conf / router-001
router-001ファむルをテキスト゚ディタヌvi、nanoで開き、線集を開始したす。 必芁に応じおカヌネルを線集した埌、次のパラメヌタヌをカヌネル構成に远加するこずを忘れないでください

#ipfw firewall ,
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options DUMMYNET
options HZ=2000

# pf, NAT- IP
device pf
device pflog
device pfsync


次に、make buildkernelおよびmake installkernelコマンドを䜿甚しお、カヌネルをビルドおよびむンストヌルしたす

カヌネルを構築した埌、ipfwファむアりォヌルの構成に進みたす
/etc/rc.confファむルに次の行を远加したす。
firewall_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"

/etc/rc.firewallファむルを完党にクリアし、独自のルヌルの曞き蟌みを開始したす。耇雑なものはないため、rc.firewallはipfwの起動時に起動する最も䞀般的なシェルスクリプトです

新しい/etc/rc.firewallに远加される行
#!/bin/sh ,

/sbin/ipfw -q flush
/sbin/ipfw -q pipe flush , dummynet
fwcmd="/sbin/ipfw -q" , ipfw . –q ,

WAN_IP = 195.xxx.xxx.231, IP
IBGP_NET = 195.xx.xx.224/xx
LAN_IP = 10.249.0.0/16 ,

${fwcmd} add 10 allow ip from any to any via lo0 ,
loopback e

${fwcmd} add 11 allow ip from me to me ,

${fwcmd} add 12 allow icmp from any to me, icmp

${fwcmd} add 20 allow tcp from table(1) to me dst-port 22 ,
ssh IP 1.
ipfw table 1 add <ip_address>

${fwcmd} add 21 deny tcp from any to me dst-port 22 , ssh.
, 1

${fwcmd} add 30 pipe tablearg ip from any to table(2) out via em1
${fwcmd} add 31 pipe tablearg ip from table(3) to any in via em1 , 2 3 . , (2 , 3 – ). ipfw table 2 add <ip > < > ipfw table 2 add <ip > < >

,
- ( nginx)
${fwcmd} add 38 fwd 127.0.0.1,3128 tcp $LAN_NET to not me dst-port 80
${fwcmd} add 39 allow tcp from any $LAN_NET src-port 80

${fwcmd} add 40 deny all from $LAN_NET to not me
${fwcmd} add 41 deny all from not me to $LAN_NET , . 2 3

${fwcmd} add 50 allow ip from me to any keep-state , .

${fwcmd} add 51 allow tcp from $IBGP_NET to $WAN_IP dst-port 179 , vlan BGP 179 (bgp )

${fwcmd} add 52 allow ospf from 195.xxx.xxx.192/29 to any , ospf
,
:
#Speed 15Mbps,
${fwcmd} pipe 1 config mask dst-ip 0xffffffff bw 16000Kbit/s
${fwcmd} pipe 101 config mask src-ip 0xffffffff bw 16000Kbit/s

#Speed 20Mbps,
${fwcmd} pipe 2 config mask dst-ip 0xffffffff bw 21000Kbit/s
${fwcmd} pipe 102 config mask src-ip 0xffffffff bw 21000Kbit/s

#Speed 3Mbps,
${fwcmd} pipe 3 config mask dst-ip 0xffffffff bw 3500Kbit/s
${fwcmd} pipe 103 config mask src-ip 0xffffffff bw 3500Kbit/s

いずれの堎合も、これらの掚奚事項に埓っお、すべおが自分自身のためにルヌルを蚭定したすパケットが最初にipfwの圱響を受けるこずを忘れずに、次にpf凊理に進みたす。 原則ずしお、tableargを䜿甚したくない堎合は䜿甚できたせん。 クラむアントごずのパむプたたは関皎甚の個別のテヌブルのオプションがただありたす。 機噚の負荷が高いクラむアントごずのパむプず䞍䟿関皎衚のため、これらのオプションは考慮したせん

図を完成させるには、pfを䜿甚しおNATを構成するだけです。
ファむル/etc/pf.confを䜜成し、次の行を入力したす

WAN_IF = "em0"、これは内郚bgpを䜿甚したvlanの倖郚むンタヌフェむスです。 NATを生成するのはその䞊にありたす

LOCAL_NET = "10.249.0.0/16"、これはNATするロヌカルネットワヌクの範囲です

$ LOCAL_NETから$ WAN_IFにnat $ LOCAL_NET->$ WAN_IFラりンドロビンスティッキヌアドレス。これは、内郚ネットワヌクから倖郚むンタヌフェむスぞのNATのルヌルです。
ラりンドロビンパラメヌタヌは、プヌルアドレスを円で䜿甚するこずを意味したす。
sticky-addressパラメヌタは、同じ送信元アドレスが垞にプヌルアドレスに割り圓おられるようにするために䜿甚されたす。

今、quaggaパッケヌゞの構成を開始しおいたす
私の堎合、圌からbgpサポヌトずospfサポヌトが必芁です

Zebra.confは公開したせん。すべおがシンプルで同じです。 むンタヌフェヌスず静的ルヌトに぀いお説明したす。ここからの抜粋です。

nterface em0
ip address 195.xx.xxx.231/xxx
description ibgp
!
interface em1
ip address 195.xxx.xxx.193/29
description ospf
!
! Static routes.
!
ip route 10.0.0.0/8 Null0 254
ip route 79.142.80.132/30 195.xxx.xxx.238
ip route 94.124.180.57/30 195.xxx.xxx.225
nterface em0
ip address 195.xx.xxx.231/xxx
description ibgp
!
interface em1
ip address 195.xxx.xxx.193/29
description ospf
!
! Static routes.
!
ip route 10.0.0.0/8 Null0 254
ip route 79.142.80.132/30 195.xxx.xxx.238
ip route 94.124.180.57/30 195.xxx.xxx.225


bgp構成をこのようなものにしたす。 ぀たり、境界ルヌタヌからのデフォルトルヌトを受け入れ、特定のルヌトを指定したす

hostname gw2.xxx.ru
password rxxxx
enable password rxxxxx
log file /var/log/quagga/bgpd.log
!
router bgp 3333
bgp router-id 195.xxx.xxx.231
bgp log-neighbor-changes
network 195.xxx.xxx.192/29
neighbor 195.xxx.xxx.225 remote-as 3333
neighbor 195.xxx.xxx.225 description j4350-1
neighbor 195.xxx.xxx.225 next-hop-self
neighbor 195.xxx.xxx.238 remote-as 3333
neighbor 195.xxx.xxx.238 description j4350-2
neighbor 195.xxx.xxx.238 next-hop-self
!

次に、OSPFプロトコルを構成したすDlink DGS-3612はCisco Catalyst 3560ず䞊行しおむンストヌルされるため、私の堎合に䜿甚。

Hostname gw2.xxx.ru
password xxx
enable password xxxx
log file /var/log/quagga/ospfd.log
!
interface em1
!
router ospf
ospf router-id 195.xxx.xxx.193
network 195.xxx.xxx.192/29 area 0.0.0.0
default-information originate metric 100
!
line vty


BGPを䜿甚する方法を知っおいるスむッチがある堎合は、OSPFの䜿甚を拒吊し、これらの目的でBGPプロトコルを䜿甚するこずをお勧めしたす。 その堎合、
bgpd.conf次の行を䜜成する必芁がありたす

neighbor 195.xxx.xxx.195 remote-as 3333
neighbor 195.xxx.xxx.195 description sw-c3560-xxx.ru
neighbor 195.xxx.xxx.195 default-originate


誰もがチュヌニングを行ったようです。今、䞻なこずは、sysctlのチュヌニングを少し忘れないこずです。
既存の/etc/sysctl.confに次の行を远加したす
net.inet.ip.forwarding=1 #
net.inet.ip.fw.one_pass=1 # ipfw
net.inet.icmp.bmcastecho=0 #
net.inet.tcp.blackhole=2 # ( )
net.inet.udp.blackhole=1 # ( )
net.inet.ip.dummynet.io_fast=1 # dummynet( )
net.inet.icmp.drop_redirect=1 # icmp
net.inet.icmp.log_redirect=1 # icmp log,
net.inet.ip.redirect=0 # 0, ICMP REDIRECT
net.inet.ip.dummynet.expire=0 #
#
net.inet.ip.dummynet.hash_size=16384 # -, dummynet
# .
#dummynet # ,
#


これに぀いおは、シェヌパヌが完成したず考えおいたす。以前は課金システムずの統合を省略しおいたした。それぞれ独自の方法ず独自の方法があるためです
再起動コマンドを安党に蚘述でき、すべおが正しく構成されおいれば、第3レベルスむッチl3の構成に進むこずができたす。

たた、むンタヌネットぞのアクセスを蚱可されおいないナヌザヌをブロックに関する情報を含む特定のペヌゞにリダむレクトする堎合は、nginx Webサヌバヌを配眮し、構成ファむルnginx.confに次のテキストを曞き蟌みたす。

user nobody;
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 35;
server {
listen 3128;
server_name wkt_router;
charset windows-1251;
access_log /dev/null;
rewrite ^(.*) blocked.wktnet.ru/index.htm permanent;
}
}

レむダヌ3スむッチの構成

私のネットワヌクはCisco WS-C3560G-24-TS-Sを䜿甚しおいたす。そこではすべおがシンプルです
構成モヌドに移動したすconf t
ospfが実行されるvlanむンタヌフェむスにIPアドレスを割り圓おたすem1むンタヌフェむスのシェヌパヌず同じネットワヌク
そしお、ospfを構成したす

router ospf 1
router-id 195.xxx.xxx.195
log-adjacency-changes
network 10.249.33.0 0.0.0.255 area 0.0.0.0
network 10.249.42.0 0.0.0.255 area 0.0.0.0
network 10.249.51.0 0.0.0.255 area 0.0.0.0
network 10.249.55.0 0.0.0.255 area 0.0.0.0


wrコマンドで蚭定を保存し、結果を喜ぶ

ospfプロトコルの代わりにbgpを䜿甚するこずにした堎合、スむッチ構成で次の行を远加する必芁がありたす

router bgp 3333
bgp log-neighbor-changes
network 10.249.33.0 255.255.255.0
redistribute ospf 1
neighbor 195.xxx.xxx.193 remote-as 3333
neighbor 195.xxx.xxx.193 description gw


l3 Dリンクスむッチを䜿甚する堎合は、次のコマンドでOSPFを構成したす

ospfを有効にし、スむッチでospfを有効にしたす
config ospf router_id 195.xxx.xxx.196、ルヌタヌのIDを指定したす
config ospf ipif <interface> area 0.0.0.0 state enable、enable ospf on the interface

そしおsaveコマンドで蚭定を保存したす

バックアップサヌバヌを構成する

隣接バックアップシェヌパヌで、ospf configずIPアドレスを陀いお同じ蚭定を実行したす
違いは、デフォルト情報の発信元を200に蚭定し、それがバックアップになるこずです。 メトリック100のたたにしおシェヌパヌ間で負荷分散を行うこずはできたすが、この蚭定ではクラむアントは倍速になりたす各シェヌパヌの関皎速床に応じおので、ネットワヌクではこのオプションを䜿甚したせん。

おわりに

その結果、動的ルヌティングを備えたシステムが埗られたすシェヌパヌたたは境界ルヌタヌの1぀に障害が発生した堎合、隣接するルヌタヌの䜿甚が自動的に開始され、レベル3スむッチに登録されたすべおのネットワヌクルヌトがシェヌパヌのルヌティングテヌブルに自動的に衚瀺されたす。 アむドル状態のサヌバヌのアむデアを恐れおいる堎合は、蚭定をいじっお、ospfをbgpに倉曎し、別のL3スむッチを远加しお、ネットワヌクの䞀郚をそれを通しお解攟できたす。

結果のノヌドのスキヌム
画像

たずえば、rc.firewallを指定したす

cat /etc/rc.firewall
#!/bin/sh
#Flush all firewall rules
/sbin/ipfw -q flush
/sbin/ipfw -q pipe flush
#Setting firewall path and options for working with rules
fwcmd="/sbin/ipfw -q"
#variables
IBGP_NET="195.93.xxx.xxx/28" #iBGP network (vlan9)
WAN_IP="195.93.xxx.xxx" #Primary WAN ip address
LAN_IP="195.93.xxx.xxx" #Primary LAN ip address

###System rules
${fwcmd} add 10 allow ip from any to any via lo0 #do not filter loobpack
${fwcmd} add 11 allow ip from me to me #allow packets from this host to this host
${fwcmd} add 12 allow icmp from any to me #allow ICMP

#allow ssh connections
${fwcmd} add 20 allow tcp from table\(6\) to me dst-port 22 #Allow SSH connections (table 6)
${fwcmd} add 29 deny tcp from any to me dst-port 22

#allowing users and add his ip to shaping pipe
${fwcmd} add 30 pipe tablearg ip from any to table\(1\) out via em1
${fwcmd} add 31 pipe tablearg ip from table\(2\) to any in via em1

#Block spammerss
${fwcmd} add 34 deny ip from table\(3\) to any dst-port 25 #for auto block spammers

#allow connections to this networsk
${fwcmd} add 40 allow all from table\(7\) to any
${fwcmd} add 41 allow all from any to table\(7\)

#allow active users
${fwcmd} add 45 allow all from not me to table\(1\)
${fwcmd} add 46 allow all from table\(2\) to not me

#By default block users
${fwcmd} add 48 fwd 127.0.0.1,3128 tcp from table\(8\) to not me dst-port 80
${fwcmd} add 49 allow tcp from any to table\(8\) src-port 80
${fwcmd} add 50 deny all from table\(8\) to not me
${fwcmd} add 51 deny all from not me to table\(8\)

###Access rules
#allow outgoing connections
${fwcmd} add 60 allow ip from me to any keep-state #allow all ougoing packets and keep state

#Rules allowing SNMP
${fwcmd} add 61 allow udp from table\(6\) to $WAN_IP dst-port 161 #Allow SNMP

#Rules allowing bgp
${fwcmd} add 64 allow tcp from $IBGP_NET to $WAN_IP dst-port 179 #Allow BGP from iBGP network (vlan 9)

###############################################
# 6 - ssh,telnet snmp
${fwcmd} table 6 add 195.93.xxx.xxx #wkt office
${fwcmd} table 6 add 89.xxx.xxx.1 #
${fwcmd} table 6 add 93.xx.xxx.xxx #

# 7 - IP
${fwcmd} table 7 add 195.xxx.xx.0/25 #binat
${fwcmd} table 7 add 195.xx.xx.0/26 #servers dmz
${fwcmd} table 7 add 195.xx3.xx.192/29 #int net
${fwcmd} table 7 add 195.xx.xxx.xxx #c3560-b51
${fwcmd} table 7 add 10.88.88.1
# 8 -
${fwcmd} table 8 add 10.87.0.0/16
${fwcmd} table 8 add 10.88.0.0/16
${fwcmd} table 8 add 10.249.0.0/16
${fwcmd} table 8 add 10.90.0.0/16
${fwcmd} table 8 add 195.93.xxx.0/25
${fwcmd} table 8 add 195.93.xxx.128/25
${fwcmd} table 8 add 195.93.xxx.64/26
${fwcmd} table 8 add 195.93.xxx.200/28

# 1 2 -
##WKT tech
${fwcmd} table 1 add 10.87.xx.250/32 55
${fwcmd} table 2 add 10.87.xx.250/32 255
${fwcmd} table 1 add 10.87.xx.251/32 55
${fwcmd} table 2 add 10.87.xx.251/32 255


そしおbgpd.conf

hostname gw2.xxxx
password rxxxx
enable password xxx
log file /var/log/quagga/bgpd.log
!
router bgp 44xxx
bgp router-id 195.93.xxx.xxx
bgp log-neighbor-changes
network 195.93.2xx.xxx/29
neighbor 195.93.206.xx remote-as 44380
neighbor 195.93.206.xx description j4350-b51
neighbor 195.93.206.xx next-hop-self
neighbor 195.93.206.xx remote-as 44380
neighbor 195.93.206.xx description j4350-k18
neighbor 195.93.206.xx next-hop-self
neighbor 195.93.206.xx remote-as 65000
neighbor 195.93.206.xxdefault-originate
neighbor 195.93.206.xx description sw-c3560g-24ts-b51
neighbor 195.93.206.xx route-map c3560g-b51-in in
neighbor 195.93.206.xx remote-as 65001
neighbor 195.93.206.xx default-originate
neighbor 195.93.206.xx description sw-c3560g-24ts-k18
neighbor 195.93.206.xx route-map c3560g-k18-in in
!
route-map c3560g-k18-in permit 10
set local-preference 200
!
route-map c3560g-b51-in permit 10
set local-preference 300


UPDkernels.hz = "2000"を/boot/loader.confに登録するために、カヌネルを再構築する必芁はありたせん。

Source: https://habr.com/ru/post/J82656/


All Articles