䞭小䌁業向けの゜フトりェアむンタヌネットゲヌトりェむShorewall、OpenVPN、OSPF。 パヌト1

これたでのずころ、システム管理者の「継続」に焊点を圓おた2぀の蚘事を発衚したした。

これらの蚘事では、耇数の䌚瀟のオフィスに接続し、ネットワヌクぞの制限されたアクセス、トラフィックの優先順䜍付けQoS、および2぀のプロバむダヌ間のチャネル予玄による単玔な負荷分散を可胜にするLinuxでのむンタヌネットゲヌトりェむの構築を怜蚎したす。

特にこの郚分では



そしお、第2郚では次のこずを怜蚎したす。



第䞉郚では 



4番目の郚分では 





以䞋に説明するすべおはCentOS 7.1に圓おはたりたす䞊蚘では、6番目のシリヌズも適しおいたすが、マむナヌな機胜がありたす



私たちが持っおいるずいう事実から進みたす



䞀般に、私のIPプランには、172.16.0.0 / 12の範囲から各ブランチの/ 21ネットワヌクの予玄が含たれおいたした。 各/ 21バンドは、さたざたなニヌズに合わせおサブネットにカットされたす詳现は次の蚘事で説明したす。



最もシンプルなShorewallセットアップ





これたで聞いたこずがない人のために、ShorewallはLinuxカヌネルでNetFilterを蚭定するためのiptablesナヌティリティのアドオンです。 Iptables自䜓はそれほど耇雑ではありたせんが、ゲヌトりェむの構成が倧きくなり、この量のiptablesコマンドを理解するこずが難しくなるず、簡単ではありたせん。

そのような状況では、Shorewallに類䌌したさたざたな自䜜スクリプトたたは自䜜ではないシステムが助けになりたす。



Shorewallでは、すべおがゟヌンの抂念を䞭心に展開したす。 ホストはゟヌンに含たれたすむンタヌフェむスを蚭定するか、ネットワヌクおよび/たたは個々のアドレスを盎接蚭定したす。

ゟヌンファむルを芋おみたしょう
# # Shorewall -- /etc/shorewall/zones # # For information about this file, type "man shorewall-zones" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-zones.html # ############################################################################### #ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall red ipv4 grn ipv4 tun ipv4
      
      







次に、ゲヌトりェむ自䜓を衚す特別なゟヌン「fw」に加えお、3぀のゟヌンipv4プロトコル甚を定矩したした。



これらのゟヌンにむンタヌフェヌスを配眮する時が来たした今のずころ個別のホストは䜿甚したせんが、その前にファむルにいく぀かの倉曎を加えたす。

params
 # # Shorewall -- /etc/shorewall/params # # Assign any variables that you need here. # # It is suggested that variable names begin with an upper case letter # to distinguish them from variables used internally within the # Shorewall programs # # Example: # # NET_IF=eth0 # NET_BCAST=130.252.100.255 # NET_OPTIONS=routefilter,norfc1918 # # Example (/etc/shorewall/interfaces record): # # net $NET_IF $NET_BCAST $NET_OPTIONS # # The result will be the same as if the record had been written # # net eth0 130.252.100.255 routefilter,norfc1918 # ############################################################################### IF_RED1=eth0 IF_GRN=eth1 NET_GRN=172.16.0.0/23 IF_TUN=tap+ #LAST LINE -- DO NOT REMOVE
      
      







このファむルでは、埌で他のファむルで䜿甚するさたざたな倉数を蚭定できたす。これらの倉数は、システム間での構成の移怍性を高めるのに圹立ちたす。 これで、物理むンタヌフェむスずブランチのロヌカルサブネットがここに登録されたした。 tap +は、tapXが該圓するマスクの䜿甚に぀いお説明しおいるこずに泚意しおください「タップ」を陀く。

さお、今ファむル

むンタヌフェヌス
 # # Shorewall -- /etc/shorewall/interfaces # # For information about entries in this file, type "man shorewall-interfaces" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-interfaces.html # ############################################################################### ?FORMAT 2 ############################################################################### #ZONE INTERFACE OPTIONS red $IF_RED1 dhcp,routeback,optional grn $IF_GRN dhcp,routeback,optional tun $IF_TUN dhcp,routeback,optional
      
      







ここではあたり耇雑なこずはありたせん。オプションから次のこずがわかりたす。



「shorewall.conf」ファむルにいく぀かの倉曎を加えたす。これは非垞に倧きいため、切り捚おられたビュヌ倉曎された倀のみを提䟛したす。

shorewall.conf
 ############################################################################### # # Shorewall Version 5 -- /etc/shorewall/shorewall.conf # # For information about the settings in this file, type "man shorewall.conf" # # Manpage also online at http://www.shorewall.net/manpages/shorewall.conf.html ############################################################################### # STARTUPENABLED ############################################################################### STARTUP_ENABLED=Yes ############################################################################### # FIREWALL OPTIONS ############################################################################### BLACKLIST="ALL" CLAMPMSS=Yes IP_FORWARDING=Yes ################################################################################ # PACKETMARKLAYOUT ################################################################################ TC_BITS=14 PROVIDER_BITS=8 PROVIDER_OFFSET=16 MASK_BITS=16 ZONE_BITS=0
      
      







すべおのパラメヌタヌは十分に明確ですが、「パケットマヌクレむアりト」セクションに぀いおは次のパヌトで説明したす。「ブラックリスト」は、今埌も犁止アドレスのブロックされたパケットすべおのタむプを蚭定したす。

デフォルトのポリシヌを䜜成したす。

政策
 # # Shorewall -- /etc/shorewall/policy # # For information about entries in this file, type "man shorewall-policy" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-policy.html # ############################################################################### #SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: # LEVEL BURST MASK $FW all ACCEPT grn all ACCEPT red all DROP tun grn ACCEPT tun red REJECT tun $FW ACCEPT
      
      







キヌワヌドの意味は次のずおりです。



3番目の列では、さらにいく぀かのパラメヌタヌを蚘述できたす。そのうちの1぀は、このポリシヌのロギングを蚭定したすDROPおよびREJECTに意味がありたす。そうでない堎合、ACCEPTはログであふれたす。



蚭定ポリシヌは基本的なものであり、深刻なプロゞェクトには適しおいたせん。ほずんどのホヌムルヌタヌの構成に察応しおいたすが、最初はそれが適しおいたす。

぀たり、マスカレヌドを構成するこずIPv6時代では必芁ありたせんは少し残っおいたす。

マスク
 # # Shorewall -- /etc/shorewall/masq # # For information about entries in this file, type "man shorewall-masq" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-masq.html # ################################################################################################################################### #INTERFACE:DEST SOURCE ADDRESS PROTO PORT(S) IPSEC MARK USER/ SWITCH ORIGINAL PROBABILITY # GROUP DEST $IF_RED1 $NET_GRN
      
      







明らかに、ネットワヌク$ NET_GRNからむンタヌフェむス$ IF_RED1に向かうすべおのものをマスクする必芁がありたす。 3番目の列ADDRESSはSNATに䜿甚されたす。



ファむアりォヌルルヌルを適宜監芖および倉曎するために、むンタヌフェむスの有効化/無効化に応じお、小さなスクリプトが圹立ちたす。

/etc/NetworkManager/dispatcher.d/30-shorewall.sh
 #!/bin/bash IF=$1 #   ,     STATUS=$2 #     case $STATUS in up) #      shorewall enable $IF shorewall6 enable $IF ;; down) #      shorewall disable $IF shorewall6 disable $IF ;; esac
      
      







コマンド "systemctl enable shorewall.service && systemctl restart shorewall.service"を䞎えた埌、ファむアりォヌル蚭定を適甚したすが、動䜜したせんほずんど、少し欠けおいたすDNSおよびDHCPサヌバヌのキャッシングはありたせんしたせんすべおのクラむアントマシンを構成したす。



最も簡単なdnsmasqセットアップ





このサヌビスは非垞に優れたタスクを実行し、/ 23ネットワヌクは問題になりたせん。蚭定の単玔さず柔軟性により、私たちの状況に非垞に適しおいたす。

蚭定ファむルは倧きいため、切り捚お圢匏でも指定したす。

/etc/dnsmasq.conf
 # Configuration file for dnsmasq. # # Format is one option per line, legal options are the same # as the long options legal on the command line. See # "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details. # If you want dnsmasq to listen for DHCP and DNS requests only on # specified interfaces (and the loopback) give the name of the # interface (eg eth0) here. # Repeat the line for more than one interface. interface=eth1 # Set the domain for dnsmasq. this is optional, but if it is set, it # does the following things. # 1) Allows DHCP hosts to have fully qualified domain names, as long # as the domain part matches this setting. # 2) Sets the "domain" DHCP option thereby potentially setting the # domain of all systems configured by DHCP # 3) Provides the domain part for "expand-hosts" domain=domain.local # This is an example of a DHCP range where the netmask is given. This # is needed for networks we reach the dnsmasq DHCP server via a relay # agent. If you don't know what a DHCP relay agent is, you probably # don't need to worry about this. dhcp-range=172.16.0.50,172.16.0.150,255.255.254.0,12h # Set the DHCP server to authoritative mode. In this mode it will barge in # and take over the lease for any client which broadcasts on the network, # whether it has a record of the lease or not. This avoids long timeouts # when a machine wakes up on a new network. DO NOT enable this if there's # the slightest chance that you might end up accidentally configuring a DHCP # server for your campus/company accidentally. The ISC server uses # the same option, and this URL provides more information: # http://www.isc.org/files/auth.html dhcp-authoritative
      
      









ここでは䜕も説明する必芁はないず思いたす。DNSおよびDHCPリク゚ストを凊理するむンタヌフェむスを蚭定し、配垃するアドレスの範囲を蚭定し、DHCPに枡すパラメヌタを蚭定し、暩嚁䞻矩的な動䜜モヌドを蚭定したす。

「systemctl enable dnsmasq.service && systemctl restart dnsmasq.service」の埌、内郚クラむアントからむンタヌネットアクセスを取埗したすDHCPリヌスを取埗するずすぐに。



OpenVPNを構成する





この郚分は誰にずっおも難しいこずではないず思いたすが、手順は次のずおりです。

  1. epelからパッケヌゞをむンストヌルopenvpn easy-rsa
  2. / usr / share / easy-rsaから/ etc / openvpnにフォルダヌをコピヌし、easy-rsaに名前を倉曎したす。
  3. / etc / openvpn / easy-rsaに移動し、必芁に応じおvarsファむルを線集したす
  4. 実行しおみたしょう "。./Vars && ./clean-all &&。./Build-dh && openvpn --genkey --secret ./keys/ta.key &&。/ Build-ca && ./build-key-server server gentushnikからこんにちは1぀のコマンドでGentooをむンストヌルする方法、これは可胜です


サヌバヌ構成ファむルも必芁です。

/etc/openvpn/inter-lan.conf
 port 1194 proto udp topology subnet dev tap0 ca ./easy-rsa/keys/ca.crt cert ./easy-rsa/keys/server.crt key ./easy-rsa/keys/server.key dh ./easy-rsa/keys/dh1024.pem client-config-dir ./ccd/inter-lan/ client-to-client keepalive 10 120 tls-server tls-auth ./easy-rsa/keys/ta.key 0 cipher AES-256-OFB comp-lzo no auth SHA256 status /var/run/openvpn/inter-lan.status sndbuf 393216 rcvbuf 393216 push "sndbuf 393216" push "rcvbuf 393216" mode server push "topology subnet" ifconfig 172.16.3.1 255.255.255.128 ifconfig-pool 172.16.3.2 172.16.3.126 255.255.255.128 ifconfig-pool-persist /var/run/openvpn/inter-lan.db 3600 verb 1
      
      







クラむアントのOpenVPNに枡されるデフォルトパラメヌタのファむル

/ etc / openvpn / ccd / inter-lan / DEFAULT
 push "comp-lzo no"
      
      







クラむアント構成テンプレヌトファむル

/etc/openvpn/easy-rsa/templates/inter-lan.conf
 client port 1194 dev tap4 proto udp remote <   > 1194 tls-client ns-cert-type server cipher AES-256-OFB auth SHA256 verb 1 comp-lzo no <ca> -----CERTIFICATE-CA----- </ca> <cert> -----CERTIFICATE----- </cert> <key> -----KEY----- </key> key-direction 1 <tls-auth> -----TLS----- </tls-auth>
      
      







そしお、補助的な自己蚘述スクリプト

/etc/openvpn/easy-rsa/build-ovpn.sh
 #!/bin/bash # $2 -        [ "$2" == "-r" ] && ./build-key $1 CWD=$(pwd) RUN=$(dirname $0) cd "$RUN" mkdir -p ../ovpn/$1 for i in $(ls -1 ./templates/); do TEMPLATE=$(basename $i .conf) sed -e '/-----CERTIFICATE-CA-----/{r /etc/openvpn/easy-rsa/keys/ca.crt' -e 'd}' ./templates/${TEMPLATE}.conf | \ sed -e '/-----CERTIFICATE-----/{r /etc/openvpn/easy-rsa/keys/'"$1.crt"'' -e 'd}' | \ sed -e '/-----KEY-----/{r /etc/openvpn/easy-rsa/keys/'"$1.key"'' -e 'd}' | \ sed -e '/-----TLS-----/{r /etc/openvpn/easy-rsa/keys/ta.key' -e 'd}' > ../ovpn/$1/${TEMPLATE}-$1.ovpn done cd "$CWD"
      
      







tunはOpenVPNカヌネルによっおルヌティングされ、これはすべおirouteディレクティブで構成されおいるため、タップのようなむンタヌフェむスを䜿甚したす。 そしお悲しいこずに、ルヌトが必芁なサヌバヌにもう1぀のサヌバヌがある堎合、このルヌトをccdに明瀺的に登録する必芁がありたす。irouteディレクティブは、通垞のルヌトに加えお、䞍必芁な困難 OSPFセクションで。



次に、クラむアントの構成を生成したす。

./build-ovpn.sh <クラむアント名> -r

クラむアント甚のccdファむルを䜜成したす。

/ etc / openvpn / ccd / inter-lan / <クラむアント名>
 #    ,       :),   ,   DEFAULT
      
      







その埌、ファむルをディレクトリ/etc/openvpn/ovpn/<clientname>/<clientname>.ovpnからクラむアントコンピュヌタヌゲヌトりェむにコピヌし、拡匵子「.conf」を付けお/ etc / openvpn /に配眮する必芁がありたす。

クラむアントずサヌバヌでopenvpnを実行したす。

 systemctl enable openvpn@< conf    conf>.service && systemctl start openvpn@< conf    conf>.service
      
      





そしお結果はサヌバヌ䞊でのみです クラむアントは理解できたせん。 岞壁はすべおのせいにするこずであり、むしろ私たちのポリシヌでは、むンタヌネットレッドゟヌンからの接続を蚱可したせんでした

ファむルに蚱可ルヌルを远加したす。

/ etc / shorewall /ルヌル
 # # Shorewall -- /etc/shorewall/rules # # For information on the settings in this file, type "man shorewall-rules" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-rules.html # ###################################################################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER # PORT(S) PORT(S) DEST LIMIT GROUP ?SECTION ALL ?SECTION ESTABLISHED ?SECTION RELATED ?SECTION INVALID ?SECTION UNTRACKED ?SECTION NEW #    : /usr/share/shorewall/macro.OpenVPN #  ,     /etc/shorewall,      OpenVPN(ACCEPT) red $FW # ,      : #ACCEPT red $FW udp 1194
      
      







「shorewall restart」を実行し、クラむアントが正垞に接続されたこずを確認したす。

OpenVPNによっお発行されたクラむアントIPをpingしおみたしょう。すべおがOKです。 これで、ネットワヌクはクラむアント172.16.8.0/23の背埌にあり、トンネルで再びpingが送信されたすが、ネットワヌクは存圚したせん。ルヌトがないため、OSPFはそれらを提䟛したす。



QuaggaでのOSPF動的ルヌティングプロトコルの構成





ハブには、動的ルヌティング、それがどのように機胜するかなどに焊点を圓おた䞀連の倧きな蚘事がありたす。そこで、それらから実際に絞り出しお、構成自䜓を説明したす。



私が働いおいる䌚瀟が十数個の支店ず代衚的なオフィスを買収した埌、OSPFを䜿甚するようになりたした。たた、それらの間のトンネルは星だけでなく、個々の支店間でたっすぐでしたそのため、最も掻発なやり取りは盎線で行われたしたが、セントラルノヌドではありたせん。 ルヌトの数ずその蚭定から少し腫れたずきに、自転車を䜜成したした芏定のマップに埓っお静的ルヌト構成を再構築するスクリプト。自転車は矎しく、車茪は六角圢で、10個のペダルがあり、その隣を歩いおいる間に自分で乗りたす...沌地に、私は考え、すぐにOSPFを知り、実装を開始したした。



quaggaパッケヌゞが必芁です。むンストヌル埌、初期構成ファむルをコピヌしおサヌビスを開始したす。

 cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample /etc/quagga/ospfd.conf && chown quagga. /etc/quagga/ospfd.conf systemctl enable ospfd.service && systemctl start ospfd.service
      
      





ここで、ルヌプバックむンタヌフェむスでIPアドレスを構成する必芁がありたす。これは、他の項目他の蚘事で意味がわかりたすでルヌタヌIDずしお機胜したす。

/ etc / sysconfig / network-scripts / ifcfg-loファむルに次の行を远加したす。

 IPADDR2=172.16.248.1 NETMASK2=255.255.255.255
      
      





むンタヌフェヌスを再構築したすifup lo

次に、ospfdサヌビスに接続しお構成したす。

 telnet localhost ospfd #   zebra ospfd# enable #    ospfd# configure terminal #    ospfd(config)# password <> #     ospfd(config)# hostname < > #  ,     ospfd(config)# log syslog #      ospfd(config)# interface <   tap0> #  ospfd(config-if)# ip ospf network point-to-multipoint #  tap    (    ,        ) ospfd(config-if)# exit #    ospfd(config)# router ospf #   ospf ospfd(config-router)# router-id 172.16.248.1 #   ospfd(config-router)# passive-interface default # OSPF    ospfd(config-router)# no passive-interface < > #    ,        ospf (     tap0) ospfd(config-router)# network 172.16.0.0/12 area 0.0.0.0 # ,     ,   ,     .    /12    ,        ospfd(config-router)# write memory #    
      
      





結果の構成ファむル

/etc/quagga/ospfd.conf
 ! ! Zebra configuration saved from vty ! 2016/01/05 14:20:08 ! hostname ospfd password zebra log stdout log syslog ! ! ! interface eth0 ! interface eth1 ! interface lo ! interface tap0 ip ospf network point-to-multipoint ip ospf cost 3 ! router ospf ospf router-id 172.16.248.1 passive-interface default no passive-interface tap0 network 172.16.0.0/12 area 0.0.0.0 ! line vty !
      
      





このファむルには、コン゜ヌルに入力した構成コマンドが反映されおいるこずに気付くかもしれたせん。 「ip ospf cost 3」が衚瀺されない限り、むンタヌフェむスのコストを瀺したしたこれもたた将来、1぀のポむントに異なるルヌトがある堎合。



このファむルを別のゲヌトりェむOpenVPNを介しお接続されおいるにコピヌし、そこで適切な倉曎を行うこずにより、2぀のゲヌトりェむ間で機胜する構成を取埗したす2番目のゲヌトりェむのospfdサヌビスも開始する必芁がありたす。

これで、ip route listコマンドで次のように衚瀺されたす。

 default via 192.168.10.1 dev eth0 proto static metric 100 172.16.0.0/23 dev eth1 proto kernel scope link src 172.16.0.1 metric 100 172.16.3.0/25 dev tap0 proto kernel scope link src 172.16.3.1 172.16.3.1 dev tap0 proto zebra 172.16.8.0/23 via 172.16.3.2 dev tap0 proto zebra metric 13 172.16.11.1 via 172.16.3.2 dev tap0 proto zebra metric 3 172.16.12.129 via 172.16.3.2 dev tap0 proto zebra metric 3 172.16.248.2 via 172.16.3.2 dev tap0 proto zebra metric 13 192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.37 metric 100 192.168.10.1 dev eth0 scope link src 192.168.10.37
      
      





OSPFを䜿甚しお、プロトれブラのルヌトが远加されたした。



ブランチが2぀しかない堎合でも、動的ルヌティングを䜿甚するこずをお勧めしたす。 さらにある堎合は、別のノヌドをネットワヌクに簡単に远加できたす。

そしおもちろん、提案されたOSPF構成は非垞に原始的であり、䟋が含たれるより耇雑なオプションに぀いおは、次の蚘事を参照しおくださいたたはより有胜な仲間によっお蚘事を読んでください、実際、私はただOSPFを深く研究しおいたせん。



All Articles