EdgeRouter - 정책 기반 라우팅 (시작 주소 기반) ========================================================== download at 2017-02-07T01:10:43Z `origin `_ Overview -------- -------------- 이 문서에서는 시작 주소를 바탕으로 정책 기반 라우팅을 설정하는 방법에 대하여 서술합니다. 이 문서는 EdgeOS에서 목적지 대신 시작 주소를 바탕으로 어떻게 정책 기반 라우팅을 설정하는지 예제를 설명합니다. 아래의 다이어그램은 2개의 인터넷 연결(ISP-1, ISP-2)을 보여주고 있습니다: #. ISP-1 on eth0 192.0.2.0/24 #. ISP-2 on eth1 203.0.113.0/24 | | LAN은 vlan을 사용합니다: #. eth2.100 192.168.0.0/24 #. eth2.200 172.16.0.0/24 | | 이 예제에서 vlan 100에서 ISP-1로, vlan 200에서 ISP-2를 사용하여 트래픽을 발생하고 싶다고 가정합니다.  네트워크 다이어그램 --------------- .. raw:: html
.. raw:: html
|image0| .. raw:: html
.. raw:: html
  정책 기반 라우팅 (PBR) -------------------- EdgeOS에서 PBR을 설정하기 위해서는 3가지가 필요합니다: #. 각 목적지에 고정 루트를 갖는 새로운 라우팅 테이블 #. 다른 라우팅 테이블을 선택하도록 방화벽 정책 수정 #. 인터페이스에 수정된 방화벽 정책 적용 새로운 라우팅 테이블 만들기 ~~~~~~~~~~~~~~~~~~~~~~~~~ table 1 에 ISP-1로 통하는 기본 루트를 vlan 100 (다음 홉 주소, 192,0.2.1)으로 설정합니다. :: ubnt@RTR# set protocols static table 1 route 0.0.0.0/0 next-hop 192.0.2.1 [edit] table 2 에 ISP-2로 통하는 기본 루트를 vlan 200 (다음 홉 주소, 203,0.113.1)으로 설정합니다 :: ubnt@RTR# set protocols static table 2 route 0.0.0.0/0 next-hop 203.0.113.1 [edit] 정책 수정하기 ~~~~~~~~~~~~~~~~~~~~ 정책 \ **수정** 은 룰에 맞는 각 정책을 수정할 수 있도록 합니다. 시작 주소가 192.168.0.0 에서 시작한다면, 라우팅 table 1을 사용해야 하므로 다음과 같이 설정합니다: :: ubnt@RTR# set firewall modify SOURCE_ROUTE rule 10 description 'traffic from eth2.100 to ISP1' ubnt@RTR# set firewall modify SOURCE_ROUTE rule 10 source address 192.168.0.0/24 ubnt@RTR# set firewall modify SOURCE_ROUTE rule 10 modify table 1 같은 방식으로 127.16.0.0/24 를 시작 주소로 갖는 다면 table 2의 rule 20을 생성합니다. :: ubnt@RTR# set firewall modify SOURCE_ROUTE rule 20 description 'traffic from eth2.200 to ISP2' ubnt@RTR# set firewall modify SOURCE_ROUTE rule 20 source address 172.16.0.0/24 ubnt@RTR# set firewall modify SOURCE_ROUTE rule 20 modify table 2 인터페이스에 정책 적용 ~~~~~~~~~~~~~~~~~~~~~~~~~ 정책을 인터페이스에 적용하기 위해서는 라우팅 테이블 룩업이 이루어지기 이전 인풋 인터페이스에 적용이 되어야 합니다. :: ubnt@RTR# set interfaces ethernet eth2 vif 100 firewall in modify SOURCE_ROUTE [edit] ubnt@RTR# set interfaces ethernet eth2 vif 200 firewall in modify SOURCE_ROUTE [edit] 테스팅 ------- 2개의 다른 vlan으로 다른 시작 주소에서 라우팅이 제대로 이루어지는지 검증을 수행합니다. 192.168.0.0/24 대역을 갖는 호스트에서 traceroute를 수행하여 2번째 라우터가 192.0.2.1 인지 확인합니다: :: ubnt@H1:~$ traceroute google.com Resolving Address: google.com traceroute to google.com (74.125.224.110), 30 hops max, 60 byte packets 1 192.168.0.1 (192.168.0.1) 0.448 ms 0.603 ms 0.704 ms 2 192.0.2.1 (192.0.2.1) 1.354 ms 1.397 ms 1.444 ms 172.168.0.0/24 대역을 갖는 호스트에서 traceroute를 수행하여 2번째 라우터가 203.0.113.1 인지 확인합니다: :: ubnt@H2:~$ traceroute google.com traceroute to google.com (74.125.224.110), 30 hops max, 38 byte packets 1 172.16.0.1 (172.16.0.1) 0.331 ms 0.275 ms 0.264 ms 2 203.0.113.1 (203.0.113.1) 0.545 ms 0.406 ms 0.357 ms   확인 명령어 ------------ 다음 명령어를 사용하여 메인 라우팅 테이블을 확인합니다: :: ubnt@RTR:~$ show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route C>* 127.0.0.0/8 is directly connected, lo C>* 192.0.2.0/24 is directly connected, eth0 C>* 203.0.113.0/24 is directly connected, eth1 C>* 172.16.0.0/24 is directly connected, eth2.200 C>* 192.168.0.0/24 is directly connected, eth2.100 | | 라우팅 테이블 중 하나를 확인하기 위해서 다음 명령어를 사용합니다: :: ubnt@RTR:~$ show ip route table 1 table 1: Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route S>* 0.0.0.0/0 [1/0] via 192.0.2.1, eth0 :: ubnt@RTR:~$ show ip route table 2 table 2: Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route S>* 0.0.0.0/0 [1/0] via 203.0.113.1, eth1  페일오버 (Failover) --------- 2개의 ISP에서는 1개의 링크가 장애가 발생했을 때 모든 트래픽이 장애가 발생하지 않은 링크를 사용해야 합니다. 예를 들어, ISP-2 링크에 장애가 생겼을 경우, 라우팅 테이블에서 상태를 \ **inactive** 로 지정해야 합니다. :: ubnt@RTR:~$ show ip route table 2 table 2: Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route S 0.0.0.0/0 [1/0] via 203.0.113.1 inactive table 2에서 사용 가능한 루트가 없을 경우, 메인 테이블 사용을 시도합니다. 현재는 기본 메인 테이블이 없기 때문에 각 ISP에 메인 테이블을 추가합니다. :: ubnt@RTR:~$ configure [edit] ubnt@RTR# set protocols static route 0.0.0.0/0 next-hop 192.0.2.1 [edit] ubnt@RTR# set protocols static route 0.0.0.0/0 next-hop 203.0.113.1 [edit] ubnt@RTR# commit [edit] ubnt@RTR# save; exit Saving configuration to '/config/config.boot'... Done exit 이제 table #2에서 다른 경로를 사용 할 것입니다. :: ubnt@RTR:~$ show ip route table 2 table 2: Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route S>* 0.0.0.0/0 [1/0] via 203.0.113.1 (recursive via 192.0.2.1) traceroute는 대안 경로를 출력합니다: :: ubnt@H2:~$ traceroute google.com traceroute to google.com (74.125.224.137), 30 hops max, 38 byte packets 1 172.16.0.1 (172.16.0.1) 0.327 ms 0.281 ms 0.255 ms 2 192.0.2.1 (192.0.2.1) 0.551 ms 0.390 ms 0.357 ms LAN에서 LAN으로의 트래픽 ------------------ 위의 예제에서 vlan이 각 라우팅 테이블과 통신할 수 없을 때, 기본 메인 테이블에 질의를 하게 됩니다. 만약 기본 메인 테이플에 질의하기를 원치 않을 경우, PBR 룰보다 상위 룰을 지정하여 목적지 네트워크를 LAN 네트워크로 지정할 수 있습니다. 먼저 방화벽 그룹에 LAN 네트워크를 추가합니다: :: ubnt@RTR# set firewall group network-group LAN_NETS network 192.168.0.0/24 [edit] ubnt@RTR# set firewall group network-group LAN_NETS network 172.16.0.0/24 [edit] 룰 5를 생성하여 LAN\_NETS 그룹을 사용하고 \ **main** 라우팅 테이블을 선택하도록 룰을 생성합니다. :: ubnt@RTR# set firewall modify SOURCE_ROUTE rule 5 description "LAN to LAN skip PBR" [edit] ubnt@RTR# set firewall modify SOURCE_ROUTE rule 5 destination group network-group LAN_NETS [edit] ubnt@RTR# set firewall modify SOURCE_ROUTE rule 5 modify table main [edit] 설정을 하고 난 이후에는 SOURCE\_ROUTE 룰은 다음과 같이 출력됩니다: :: ubnt@RTR# show firewall modify SOURCE_ROUTE enable-default-log rule 5 { description "LAN to LAN skip PBR" destination { group { network-group LAN_NETS } } modify { table main } } rule 10 { action modify description "traffic from eth2.100 to ISP1" modify { table 1 } source { address 192.168.0.0/24 } } rule 20 { action modify description "traffic from eth2.200 to ISP2" modify { table 2 } source { address 172.16.0.0/24 } } [edit] | | **Note**: \ *modify table* 명령을 사용하는 룰은 더 이상 탐색을 종료하게 됩니다. 만약 rule 5을 수행하면, rule 10과 rule 20의 정책은 수행하지 않게 됩니다. \ *modify* 명령을 통해서 다른 내용(mark, dscp, tcp-mss)를 변경하고자 한다면 위의 방법은 적절하지 않은 방법입니다. 이와 같은 경우에는 PBR 룰보다 상위 룰로 지정해야 합니다. 예제 설정 --------------------- .. raw:: html
.. raw:: html
.. raw:: html
:: ubnt@RTR:~$ cat /config/config.boot firewall { group { network-group LAN_NETS { network 192.168.0.0/24 network 172.16.0.0/24 network 10.0.0.0/24 } } modify SOURCE_ROUTE { enable-default-log rule 5 { action modify description "LAN to LAN skip PBR" destination { group { network-group LAN_NETS } } modify { table main } } rule 10 { action modify description "traffic from eth2.100 to ISP1" modify { table 1 } source { address 192.168.0.0/24 } } rule 20 { action modify description "traffic from eth2.200 to ISP2" modify { table 2 } source { address 172.16.0.0/24 } } } } interfaces { ethernet eth0 { address 192.0.2.2/24 } ethernet eth1 { address 203.0.113.2/24 } ethernet eth2 { address 10.0.0.1/24 firewall { in { modify SOURCE_ROUTE } } vif 100 { address 192.168.0.1/24 firewall { in { modify SOURCE_ROUTE } } } vif 200 { address 172.16.0.1/24 firewall { in { modify SOURCE_ROUTE } } } } } protocols { static { route 0.0.0.0/0 { next-hop 192.0.2.1 { } next-hop 203.0.113.1 { } } table 1 { route 0.0.0.0/0 { next-hop 192.0.2.1 { } } } table 2 { route 0.0.0.0/0 { next-hop 203.0.113.1 { } } } } } service { dhcp-server { shared-network-name LAN { authoritative enable subnet 10.0.0/24 { default-router 10.0.0.1 dns-server 10.0.0.1 lease 86400 start 10.0.0.10 { stop 10.0.0.100 } } } shared-network-name LAN1 { authoritative enable subnet 192.168.0.0/24 { default-router 192.168.0.1 dns-server 192.168.0.1 lease 86400 start 192.168.0.10 { stop 192.168.0.100 } } } shared-network-name LAN2 { authoritative enable subnet 172.16.0.0/24 { default-router 172.16.0.1 dns-server 172.16.0.1 lease 86400 start 172.16.0.10 { stop 172.16.0.100 } } } } dns { forwarding { cache-size 150 listen-on eth2 listen-on eth2.100 listen-on eth2.200 } } gui { https-port 443 } nat { rule 5000 { outbound-interface eth0 type masquerade } rule 5010 { outbound-interface eth1 type masquerade } rule 5020 { outbound-interface eth0 type masquerade } } } ssh { port 22 protocol-version v2 } telnet { port 23 } } system { host-name RTR login { user ubnt { authentication { encrypted-password $1$zKNoUbAo$gomzUbYvgyUMcD436Wo66. } level admin } } name-server 8.8.8.8 ntp { server 0.ubnt.pool.ntp.org { } server 1.ubnt.pool.ntp.org { } server 2.ubnt.pool.ntp.org { } server 3.ubnt.pool.ntp.org { } } syslog { global { facility all { level notice } facility protocols { level debug } } } time-zone US/Pacific } /* Warning: 다음 줄을 삭제하지 마시오. */ /* === vyatta-config-version: "firewall@4:quagga@2:config-management@1:dhcp-relay@1:dhcp-server@4:ipsec@3:nat@3:qos@1:system@4:ubnt-pptp@1:vrrp@1:webgui@1:webproxy@1:zone-policy@1" === */ /* Release version: v1.0.3dev.4530060.130124.0102 */ .. rubric:: Related Articles :name: related-articles :class: firstHeading gumax-firstHeading wysiwyg-text-align-left .. raw:: html
-------------- .. raw:: html
- `SSH로 커넥션을 생성하는 방법 `__    .. raw:: html
.. raw:: html
.. raw:: html
.. |image0| image:: /hc/en-us/article_attachments/202758584/network_diagram.png