pf(packet filter)¸¦ ÀÌ¿ëÇÑ Multiple-route »ç¿ë¹ý

À̱ÛÀº FreeBSD¿¡¼­ ÀϹÝÀûÀÎ route ¼³Á¤À¸·Î Áö¿øµÇÁö ¾Ê´Â Multiple-route¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù. Multiple-route´Â network ¼³Á¤¿¡¼­ µ¿½Ã¿¡ ¿©·¯°³ÀÇ default route¸¦ »ç¿ëÇϴ°ÍÀ» ¸»ÇÕ´Ï´Ù. ¿¹¸¦µé¸é 2°³ ¶Ç´Â ±× ÀÌ»óÀÇ ADSL¶óÀÎÀ» µ¿½Ã¿¡ »ç¿ëÇØ¼­ network ¼Óµµ¸¦ Çâ»ó½ÃŰ°í ½Í°Å³ª, Àü¿ë¼±°ú ADSL °°ÀÌ »ç¿ëÇϸ鼭 ƯÁ¤ »ç¿ëÀÚ ¶Ç´Â ƯÁ¤ ¼­ºñ½º´Â ADSL·Î¸¸ º¸³»°Å³ª Çϴ°ÍÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. KAME Project¿¡¼­´Â ÀÌ ºÎºÐ¿¡ ´ëÇÑ ½ÇÇèÀûÀÎ patch°¡ ÀÖÁö¸¸ ¾ÆÁ÷ ¸¹Àº ¹®Á¦°¡ Àִ°ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù.  À̱ÛÀº FreeBSD pf¸¦ »ç¿ëÇØ¼­ È¿°úÀûÀ¸·Î ¿©·¯°³ÀÇ route¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.

1. Network ¼³Á¤

Ä¿³Î¸ðµå PPPoE¿Í pf/ipfilter/ipfw¿ÍÀÇ ¿¬µ¿¿¡¼­ ¼Ò°³ÇÑ Ä¿³Î¸ðµå PPPoE¸¦ »ç¿ëÇÕ´Ï´Ù. ±×¸®°í Ä¿³Î¸ðµå PPPoEÀÇ ¼³Á¤Àº Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ´Ù½Ã ¼³¸íÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ADSLÀÇ ¼³Á¤°ú mpdÀÇ »ç¿ë¹ýÀº Ä¿³Î¸ðµå PPPoE¿Í pf/ipfilter/ipfw¿ÍÀÇ ¿¬µ¿À» ¸ÕÀú ÂüÁ¶Çϱ⠹ٶø´Ï´Ù. <±×¸² 1>Àº º» ±Û¿¡¼­ »ç¿ëÇÒ network±¸¼ºµµ ÀÔ´Ï´Ù.

                                                                                    [FreeBSD mpd]
[ÀüÈ­±¹ÀÇ DSLSM]<--------------->|xDSL¸ðµ© |<----------------->| NIC       NIC |<------------->[HUB]<------------------>
                  ÀüÈ­¼±                                                UTP   |fxp1       fxp0 |  UTP                   192.168.10.X
                                                                                 À¯µ¿ IP    192.168.10.2
                                                                                          |

[ÀüÈ­±¹ÀÇ DSLSM]<--------------->|xDSL¸ðµ©|<--------------------------+
                                                                           UTP À¯µ¿ IP
                                                                                      fxp2

                                                                      <±×¸² 1>

  FreeBSD¿¡¼­´Â 3°³ÀÇ NICÀ» °¡Áö°í ÀÖ½À´Ï´Ù. 2°³´Â ¿ÜºÎÀÇ ADSL·Î ¿¬°áµÇ°í ³ª¸ÓÁö Çϳª´Â Switching Hub¿Í ¿¬°áµË´Ï´Ù. ³ª¸ÓÁö ¼³Á¤Àº Ä¿³Î¸ðµå PPPoE¿Í pf/ipfilter/ipfw¿ÍÀÇ ¿¬µ¿°ú µ¿ÀÏÇÕ´Ï´Ù.

2. ¼³Ä¡Àü À¯ÀÇ »çÇ×

 ÀÌ ±ÛÀº FreeBSD 5.1°ú FreeBSD pf 1.58»ó¿¡¼­ mpd 3.13À¸·Î ½ÃÇèÇÏ¿´½À´Ï´Ù.

3. mpd ¼³Á¤

  mpd¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ Ãß°¡µÇ´Â  ADSL¶óÀο¡ ´ëÇÑ ºÎºÐÀ» Ãß°¡Çϵµ·Ï ÇÕ´Ï´Ù.

<mpd.conf>

#
# Kernel mode PPPoE mpd.conf
# $FreeBSD$
#
default:
        load PPPoE1 -- (1)
        load PPPoE2 -- (2)


# 1st line, fxp1
PPPoE1:
        new -i ng0 PPPoE1 PPPoE1
        set iface addrs 1.1.1.1 2.2.2.2
        set iface route default
        set iface disable on-demand
        set iface idle 0
        set bundle disable bw-manage
        set bundle disable multilink
        set bundle authname ktis0002
        set link no acfcomp protocomp
        set link disable pap chap
        set link accept pap chap
        set link mtu 1492
        set ipcp yes vjcomp
        set ipcp ranges 0.0.0.0/0 0.0.0.0/0
        set iface up-script /usr/local/etc/mpd/mpd.linkup1
        set iface down-script /usr/local/etc/mpd/mpd.linkdown1
        open iface

#
# Additional links
# 2nd line, fxp2
PPPoE2:
        new -i ng1 PPPoE2 PPPoE2
        set iface addrs 1.1.1.1 2.2.2.2
# route was set by first line
#       set iface route default -- (3)
        set iface disable on-demand
        set iface idle 0
        set bundle disable bw-manage
        set bundle disable multilink
        set bundle authname ktis0001
        set link no acfcomp protocomp
        set link disable pap chap
        set link accept pap chap
        set link mtu 1492
        set ipcp yes vjcomp
        set ipcp ranges 0.0.0.0/0 0.0.0.0/0
        set iface up-script /usr/local/etc/mpd/mpd.linkup2
        set iface down-script /usr/local/etc/mpd/mpd.linkdown2
        open iface

¿©·¯ ¶óÀÎÀ» »ç¿ëÇϱâ À§Çؼ­´Â (1), (2)ó·³ load ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ Ãß°¡ÀûÀÎ Á¢¼Ó¶óÀÎÀ» ·ÎµåÇϵµ·Ï ÇÕ´Ï´Ù. (3)Àº PPPoE1¿¡¼­ default route°¡ ¼³Á¤µÇ±â ¶§¹®¿¡ ¼³Á¤ÇÏÁö ¾Ê¾Ò½À´Ï´Ù.

mpd.links¿¡µµ Ãß°¡µÇ´Â ¶óÀÎÀ» Á¤ÀÇÇϵµ·Ï ÇÕ´Ï´Ù.

<mpd.links>

#
# mpd.links
#
PPPoE1:
        set link type pppoe
        set pppoe iface fxp1

PPPoE2:
        set link type pppoe
        set pppoe iface fxp2

mpd.secret¿¡µµ Ãß°¡µÇ´Â ID¿Í password¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

<mpd.secret>

#
# mpd.secret
#
your_id1        your_password1
your_id2        your_password2

mpdÀǹ®Á¦ÀÎÁö ¾Æ´Ï¸é Á¢¼Ó½Ã timing»óÀÇ ¹®Á¦ÀÎÁö È®½ÇÇÏÁö ¾ÊÁö¸¸ Ä¿³Î¸ðµå PPPoE¿Í pf/ipfilter/ipfw¿ÍÀÇ ¿¬µ¿Ã³·³ ÇϳªÀÇ script·Î´Â µÎ¹øÂ°ÀÇ Á¢¼ÓÀÌ Á¦´ë·Î Á¢¼Ó¼³Á¤ÀÌ µÇÁö ¾Ê´Â °æ¿ì°¡ °¡²û ¹ß»ýÇß½À´Ï´Ù. ±×·¡¼­ °¢°¢ÀÇ up/down script¸¦ ±¸¼ºÇß½À´Ï´Ù.

<mpd.linkup1>

#!/bin/sh
#
# mpd startup script for PF
#
/usr/bin/touch /tmp/.mpd-linkup1
if [ -f /tmp/.mpd-linkup1 ] && [ -f /tmp/.mpd-linkup2 ]; then
    /sbin/pfctl -Fa -f /etc/pf.conf
fi

<mpd.linkdown1>

#!/bin/sh
/bin/rm -f /tmp/.mpd-linkup1

<mpd.linkup2>

#!/bin/sh
#
# mpd startup script for PF
#
/usr/bin/touch /tmp/.mpd-linkup2
if [ -f /tmp/.mpd-linkup1 ] && [ -f /tmp/.mpd-linkup2 ]; then
    /sbin/pfctl -Fa -f /etc/pf.conf
fi

<mpd.linkdown2>

#!/bin/sh
/bin/rm -f /tmp/.mpd-linkup2

logÆÄÀϼ³Á¤À̳ª mpd½ÇÇà½ÃÀÇ ¹®Á¦´Â Ä¿³Î¸ðµå PPPoE¿Í pf/ipfilter/ipfw¿ÍÀÇ ¿¬µ¿À» ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù.

4. pf ·ê¼Â

  »ç¿ëÇÒ ·ê¼ÂÀº network¼³Á¤°ú Á¤Ã¥¿¡ µû¶ó¼­ ´Ù¸£Áö¸¸ ¿©±â¼­´Â °£´ÜÇÑ °æ¿ì¸¦ °í·ÁÇϰڽÀ´Ï´Ù.
    1. À¥°°Àº public ¼­ºñ½º´Â ÇÏÁö ¾Ê´Â´Ù.
    2. port scanÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.
    3. ³»ºÎ »ç¿ëÀÚÁß Æ¯Á¤ÇÑ È£½ºÆ®¸¸ ÀÌ ½Ã½ºÅÛÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
    4. ¸ðµç messenger·ùÀÇ ¼­ºñ½º¸¦ ÇÏÁö ¾Ê´Â´Ù.
    5. ¿ÜºÎ·Î ³ª°¡´Â ¸ðµç trafficÀº round-robin½ÄÀ¸·Î 2°³ÀÇ ADSL¶óÀÎÀ» ÀÌ¿ëÇÑ´Ù.
    6. NAT ŽÁö¸¦ ¹«·ÂÈ­ ½ÃŲ´Ù.
    7. pf¿¡¼­ MSS¸¦ Á¶Á¤Çϵµ·Ï ÇÑ´Ù.
    8. ¿ÜºÎ·Î ³ª°¡´Â ¸ðµç packetÀº state¸¦ »ý¼ºÇϵµ·Ï ÇÑ´Ù.


#
# $FreeBSD$
# PF rule set for mpd on FreeBSD
#
# Network Configuration
#
#
#      Kernel mode PPPoE with mpd
# -----------[FreeBSD PF]---------------[S/W Hub]------[192.168.10.0/24]
#  ADSL1    fxp1 |   fxp0(192.168.10.2)
#                |
# ---------------+
#  ADSL2    fxp2
#

# ADSL #1
extif0="ng0"
extgw0="xxx.xxx.xxx.xxx" -- (1)
# ADSL #2
extif1="ng1"
extgw1="yyy.yyy.yyy.yyy" -- (2)
ExtIF="{" $extif0 $extif1 "}"
IntIF="fxp0"
ME="192.168.10.2"
INTERNAL="192.168.10.0/24"

tcp_winmx="{4661, 6699, 7950, 7951, 7952}"
udp_winmx="{6257}"
icq="{64.12.161.185, 64.12.200.89, 205.188.153.249, 205.188.179.233, 64.12.161.153}"
oscar="{64.12.161.153, 64.12.161.185, 64.12.200.89, 205.188.153.249, 205.188.179.233}"
yahoo="{216.136.233.128}"

table <badhost> const {0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
                        224.0.0.0/4, 240.0.0.0/4, 10.0.0.0/8, \
                        172.16.0.0/12, 192.168.0.0/16, 255.255.255.255, \
                        127.0.0.1/8}
#
# hosts that can use this system as a gateway
#
table <allowhost> const {192.168.10.1, 192.168.10.2, 192.168.10.6, \
                         192.168.10.21, 192.168.10.7, 192.168.10.12}

set loginterface $IntIF

# Clean up fragmented and abnormal packets, defeat NAT detection too
# max-mss is needed due to mpd's poor MSS handling
scrub in all
scrub out all random-id max-mss 1440

#
# NAT section
#
nat on $extif0 inet from $INTERNAL to any -> ($extif0)
nat on $extif1 inet from $INTERNAL to any -> ($extif1)


# Remember default rule for non-matching packets are passed!!!
block             out log on $ExtIF           all
block             in  log on $ExtIF           all
block             out log on $IntIF           all
block             in  log on $IntIF           all
block return-rst  out log on $ExtIF proto tcp all
block return-rst  in  log on $ExtIF proto tcp all
block return-icmp out log on $ExtIF proto udp all
block return-icmp in  log on $ExtIF proto udp all

# allow lo0 interface packet
pass in quick on lo0 all
pass out quick on lo0 all
# allow internal network traffic
pass in quick on $IntIF from <allowhost> to $ME -- (3)
pass out quick on $IntIF from $ME to <allowhost> -- (4)
pass in on $IntIF route-to \
        { ($extif0 $extgw0), ($extif1 $extgw1) } round-robin \
        from <allowhost> to any keep state -- (5)

#
# block spoofing attack
#
block in quick log on $ExtIF from <badhost> to any
#
# block port scan
block in log quick on $ExtIF inet proto tcp from any to any flags FUP/FUP
block in log quick on $ExtIF inet proto tcp all flags SF/SFRA
block in log quick on $ExtIF inet proto tcp all flags /SFRA

#
#
# send ICMP reset on NetBIOS and auth
#
block return-rst in log quick on $ExtIF proto tcp from any to any port {113, 137, 139}

# block WinMX
block out log quick inet proto tcp from any to any port $tcp_winmx
block out log quick inet proto udp from any to any port $udp_winmx

# block MSN(messenger.hotmail.com)
block out log quick proto tcp from any to { 207.46.104.20, 64.4.13.0/24 }
block out log quick proto tcp from any to any port {1863, 5060, 5061}
block out log quick proto udp from any to any port 5060

# block ICQ(login.icq.com)
block out log quick proto tcp from any to $icq
block out log quick proto tcp from any to any port 5190

# block AIM(login.oscar.aol.com)
block out log quick proto tcp from any to $oscar
# port 5190 already blocked by ICQ
#block out log quick proto tcp from any to any port 5190

# block Yahoo(cs.yahoo.com)
block out log quick proto tcp from any to $yahoo
block out log quick proto tcp from any to port 5050

#
# all traffic to extif0 should go gateway #0
# all traffic to extif1 should go gateway #1
pass out on $extif1 route-to ($extif0 $extgw0) from $extif0 to any -- (6)
pass out on $extif0 route-to ($extif1 $extgw1) from $extif1 to any -- (7)

#
#
# general pass out rules for all external interfaces
pass out on $extif0 inet proto tcp all flags S/SA keep state
pass out on $extif0 inet proto {udp, icmp} all keep state
pass out on $extif1 inet proto tcp all flags S/SA keep state
pass out on $extif1 inet proto {udp, icmp} all keep state

(1), (2)´Â °¢°¢ÀÇ interface¿¡ ÇÒ´çµÈ gateway IP addressÀÔ´Ï´Ù. mpd¿¡¼­ Á¢¼ÓÀÌ µÈ ÈÄ ¼³Á¤µÇ´Â gateway address¸¦ ÁöÁ¤Çϵµ·ÏÇÕ´Ï´Ù. ¹®Á¦´Â À¯µ¿ IP¸¦ »ç¿ëÇÏ´Â ADSL¿¡¼­´Â IP°¡ º¯°æµÉ ¼ö ÀÖ°í ÀÌ¿¡ µû¶ó¼­ gatewayµµ º¯°æµÉ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. º¸´Ù Á¤È®ÇÑ ¹æ¹ýÀº Á¢¼Ó½Ã ½ÇÇàÇÏ´Â script¿¡¼­ ÇÒ´çµÈ gateway·Î ÁöÁ¤Çϵµ·Ï Çϴ°ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ °æ¿ì ¿ÜºÎ script¿Í awk(1), perl(1)À» ÀÌ¿ëÇÑ Ã³¸®°¡ ÇÊ¿äÇÕ´Ï´Ù. ±×·¯³ª ½ÇÁ¦·Î gateway°¡ º¯°æµÇ´Â °æ¿ì´Â °ÅÀÇ ¾ø½À´Ï´Ù.(Àü ¾ÆÁ÷ Çѹøµµ °Ý¾îº¸Áö ¸øÇß½À´Ï´Ù.) ´ëºÎºÐÀÇ °æ¿ì °íÁ¤µÈ gateway address¸¦ »ç¿ëÇÏ´õ¶óµµ º° ¹®Á¦°¡ ¾øÀ»°ÍÀ¸·Î »ý°¢ÇÕ´Ï´Ù. ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â gateway address´Â mpd°¡ ÇϳªÀÇ link¸¦ ÀÌ¿ëÇϵµ·Ï ¼³Á¤Çؼ­ È®ÀÎÇÏ¸é µË´Ï´Ù.
(3), (4)´Â ³»ºÎ networkÀÇ ½Ã½ºÅÛ Áß Æ¯Á¤ È£½ºÆ®°¡  ÀÌ ½Ã½ºÅÛ($ME)À¸·Î Á¢¼ÓÇÏ´Â °æ¿ì¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¸¸ÀÏ (3), (4)°¡ ¾ø´Ù¸é (5)¿¡ ÀÇÇØ¼­ ¸ðµç trafficÀÌ ¿ÜºÎ·Î Àü¼ÛµË´Ï´Ù. Áï ¿ÜºÎ¿¡¼­ sshµîÀ¸·Î ÀÌ È£½ºÆ®·Î Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù.
(5)´Â °¡Àå ÇÙ½ÉÀûÀÎ ºÎºÐÀ¸·Î ¿ÜºÎ·Î ³ª°¡´Â trafficÀ» µÎ°³ÀÇ gateway·Î round-robin ¹æ½ÄÀ¸·Î ³ª´©¾î¼­ º¸³»°Ô µË´Ï´Ù. round-robin¿Ü¿¡µµ bitmask, random, source-hashµîÀÌ ¿Ã  ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÀÌ¿ëÇϸé ÀϹÝÀûÀÎ pf·ê¿¡ ´Ù¾çÇÑ Á¦¾àÀ» °¡Çؼ­ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. round-robinÀÇ °æ¿ì ÇÑ ½Ã½ºÅÛ¿¡¼­ Á¢¼ÓÇÏ´õ¶óµµ ¿©·¯°³ÀÇ route¸¦ µ¿½Ã¿¡ ÀÌ¿ëÇϱ⠶§¹®¿¡ ºÎÇϸ¦ ºÐ»êÇÏ´Â °¡Àå È¿°úÀûÀÎ ¹æ¹ýÁßÀÇ Çϳª·Î »ý°¢µË´Ï´Ù. ¸¸ÀÏ port¿¡ Á¦¾àÀ» °¡ÇÏ¸é ¼­ºñ½ºº°·Î »ç¿ëÇÏ´Â ADSL¶óÀÎÀ» °áÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
(6),(7)Àº $extif0¿Í $extif1·Î Àü¼ÛµÈ packetÀÌ ÁöÁ¤µÈ gateway¸¦ »ç¿ëÇϵµ·Ï ÁöÁ¤ÇÕ´Ï´Ù. ¸¸ÀÏ ISP¿¡¼­ °°Àº gateway¸¦ ÇÒ´çÇÏ°Ô µÇ¸é (5)ÀÇ route-to°¡ µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ADSL½Åû½Ã ¹Ýµå½Ã ´Ù¸¥ gateway¸¦ ÇÒ´çÇϵµ·Ï  ÇϽʽÿä.

5. Àü¿ë¼±(T1/E1)°ú ADSL »ç¿ë½ÃÀÇ ¼³Á¤

 4. ¿¡¼­´Â 2°³ÀÇ ADSLÀ» »ç¿ëÇϴ°ÍÀ» °¡Á¤Çß½À´Ï´Ù. ±×·¯³ª 4.¿¡ »ç¿ëµÈ ·ê¼ÂÀº ÀϹÝÀûÀ̱⠶§¹®¿¡ interfaceÀ̸§°ú  gatewayÁÖ¼Ò¸¸ º¯°æÇÏ¸é °°Àº ·ê¼ÂÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
 

6. ¼³Á¤µÈ ¿¹

  µÎ°³ÀÇ ADSL¶óÀÎÀ» »ç¿ëÇÒ°æ¿ì ifconfig(8)¿¡¼­ ´ÙÀ½°ú °°Àº ³»¿ëÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

monster# ifconfig -a
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.10.2 netmask 0xffffff00 broadcast 192.168.10.255
        inet6 fe80::207:e9ff:fe08:4585%fxp0 prefixlen 64 scopeid 0x1
        ether 00:07:e9:08:45:85
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::2d0:b7ff:fe2c:a06c%fxp1 prefixlen 64 scopeid 0x2
        ether 00:d0:b7:2c:a0:6c
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::290:27ff:fee9:24ef%fxp2 prefixlen 64 scopeid 0x3
        ether 00:90:27:e9:24:ef
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
pfsync0: flags=41<UP,RUNNING> mtu 1896
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
        inet 211.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xffffffff
        inet6 fe80::207:e9ff:fe08:4585%ng0 prefixlen 64 scopeid 0x7
ng1: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
        inet 61.yyy.yyy.yyy --> yyy.yyy.yyy.yyy netmask 0xffffffff
        inet6 fe80::207:e9ff:fe08:4585%ng1 prefixlen 64 scopeid 0x8

  netgraph node ng0, ng1¸ðµÎ IP address¸¦ ÇÒ´ç¹Þ¾Ò°í, »ó´ëÆíÀÇ ÁÖ¼Ò°¡ °¢°¢ xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy·Î ¼³Á¤µÈ°ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¼³Á¤ÀÌ ¿Ï·áµÇ¸é ÀÌ ½Ã½ºÅÛÀ» gateway·Î ÀÌ¿ëÇØ¼­ Á¢¼ÓÇØ º¸±â ¹Ù¶ø´Ï´Ù. ¿¹Àüº¸´Ù ºü¸¥ ¼Óµµ¸¦ ü°¨ÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¤¸» ¿©·¯°³ÀÇ ¶óÀÎÀ» »ç¿ëÇÏ´ÂÁö´Â traceroute(8)¸¦ »ç¿ëÇØ¼­ ¾î¶² route¸¦ ÀÌ¿ëÇÏ´ÂÁö È®ÀÎÇØ º¸±â ¹Ù¶ø´Ï´Ù. ¶Ç´Â ADSL¸ðµ©ÀÇ LED¸¦ º¸¼Åµµ ¾Ë ¼ö ÀÖ½À´Ï´Ù. µÎ ¶óÀθðµÎ Orange LED°¡ ±ô¹ÚÀÔ´Ï´Ù.

<ÁÖÀÇ>
 ADSLÀÇ °æ¿ì µÎ°³ ¶Ç´Â ±× ÀÌ»óÀÇ ¶óÀÎÀ» »ç¿ë½Ã °°Àº gateway address¸¦  ISP¿¡¼­ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì´Â µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ¸¸ÀÏ µÎ°³ÀÇ ADSL¶óÀÎÀÇ gateway address°¡ °°´Ù¸é ´Ù¸¥ gateway¸¦ »ç¿ëÇϵµ·Ï ISP¿¡ ¿äûÇϱ⠹ٶø´Ï´Ù.

7.  round-robin »ç¿ë½ÃÀÇ ¹®Á¦Á¡

  round-robinÀº  trafficÀÇ Æ¯¼º¿¡ °ü°è¾øÀÌ Á¢¼Ó½Ã¸¶´Ù ÀÌ¿ë °¡´ÉÇÑ  route¸¦ ¼øÂ÷ÀûÀ¸·Î ¼±ÅÃÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì round-robin¹æ½ÄÀº ¹®Á¦°¡ ¾øÁö¸¸ Á¢¼Ó½Ã µÎ°³ÀÌ»óÀÇ connectionÀ» ÇÊ¿ä·ÎÇÏ´Â ÇÁ·Î±×·¥¿¡°Ô´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦µé¸é ftpÀÇ °æ¿ì control connection°ú data connectionÀÇ µÎ°³¸¦ »ç¿ëÇÕ´Ï´Ù. ¸¸ÀÏ control connection°ú data connectionÀÌ ¼­·Î ´Ù¸¥ route¸¦ ÅëÇÏ¿© Àü¼ÛµÇ¸é NAT¿¡ ÀÇÇØ¼­ control connection°ú data connectionÀÌ ¼­·Î ´Ù¸¥ IP·Î º¯È¯µÇ¾î ftp¼­¹ö·Î Àü¼ÛµÇ°í ftp¼­¹ö¿¡¼­´Â À̸¦ ¹«½ÃÇÏ°Ô µË´Ï´Ù. ftp client¿¡¼­´Â ¸í·ÉÀÌ ½ÇÆÐÇÒ °æ¿ì ÀÌÀü¿¡ ³»¸° ¸í·ÉÀ» ´Ù½Ã ¹Ýº¹ÇÏ¸é ¾Æ¸¶µµ round-robin¿¡ ÀÇÇØ¼­ ´ÙÀ½¿¡´Â ¿Ã¹Ù¸¥ route¸¦ »ç¿ëÇÒ ¼ö µµÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ·±½ÄÀÇ network»ç¿ëÀº ºÒÇÊ¿äÇÑ trafficÀ» ¹ß»ý½Ã۸ç, ´õ Áß¿äÇѰÍÀº ÀÌ·¯ÇÑ trafficÀº ±¹³»ÀÇ ADSLÀÌ Á¦ÇÑÇÏ´Â 64KbpsÀÇ ºñÇö½ÇÀûÀ¸·Î ´À¸° uplink¼Óµµ¿¡ Ä¡¸íÀûÀÎ ¿µÇâÀ» °¡Á®¿Í¼­ network¼Óµµ¸¦ ÇöÀúÇÏ°Ô °¨¼Ò½Ãŵ´Ï´Ù.(TCP ÇÁ·ÎÅäÄÝÀº ¼Û½ÅÇÑ packetÀÌ Á¦´ë·Î Àü¼ÛµÇ¾ú´ÂÁö ACK packetÀ» ¿ä±¸ÇÕ´Ï´Ù. Download¼Óµµ°¡ ºü¸£´Ù´Â°ÍÀº ÀÌ¿¡ ºñ·ÊÇØ¼­ TCP ACK packetÀÌ ºü¸¥ ¼Óµµ·Î »ó´ë¹æÀ¸·Î Àü¼ÛµÈ´Ù´Â°ÍÀ» ÀǹÌÇÕ´Ï´Ù. ACK packetÀÌ ¾î¶°ÇÑ ÀÌÀ¯·Î Á¦¶§¿¡ Àü¼ÛµÇÁö ¾ÊÀ¸¸é download¼Óµµµµ ÀÌ¿¡ µû¶ó¼­ °ã°ÝÈ÷ °¨¼ÒÇÕ´Ï´Ù. ADSLÀº uplinkÀÇ bandwidth°¡ À۱⶧¹®¿¡  ¿©·¯°³ÀÇ connectionÀ» ¿ä±¸ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇϸé uplink°¡ saturationµÇ´Â »óȲÀÌ ¹ß»ýÇÒ °¡´É¼ºÀÌ ³ô½À´Ï´Ù. °Ô´Ù°¡ ±¹³»ÀÇ uplink¼Óµµ°¡ ³Ê¹« À۱⠶§¹®¿¡ ¾Æ¹«¸® ÀüÈ­±¹ÀÇ DSLAM¿¡¼­ download¼Óµµ¸¦ 2MBÀÌ»óÀ¸·Î ÁöÁ¤Çصµ ±× ¼Óµµ¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù. ÇØ°áÃ¥À¸·Î´Â downloadÁß¿¡´Â ´Ù¸¥  networkÀÛ¾÷À» ÇÏÁö ¾Ê°Å³ª ALTQ¸¦ ÀÌ¿ëÇØ¼­ TCP ACK packet¿¡ priority¸¦ ºÎ¿©ÇÏ´Â ¹æ¹ý¿Ü¿¡´Â ¾ø½À´Ï´Ù.)
  round-robinÀÇ µ¿ÀÛ¹æ½ÄÀÌ ¿î¿ëȯ°æ¿¡ ¸ÂÁö ¾Ê´Â´Ù¸é ³»ºÎ¿¡¼­ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ IPº°·Î ƯÁ¤ gateway¸¦ »ç¿ëÇÏ´Â ¹æ¹ý(netmask, source-hash)°ú ƯÁ¤ siteÀÇ °æ¿ì ÁöÁ¤µÈ gateway¸¸ »ç¿ëÇϵµ·Ï ÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ÀÌ ¹æ¹ýÀº round-robin¿¡ ºñÇØ¼­ µÎ°³ÀÇ route¸¦ È¿°úÀûÀ¸·Î ÀÌ¿ëÇÏÁö´Â ¸øÇÕ´Ï´Ù.

 ftp¸¦ Á¦¿ÜÇÑ ´ëºÎºÐÀÇ ¸ðµç ¼­ºñ½º´Â ÇϳªÀÇ connectionÀ» »ç¿ëÇÏÁö¸¸ ´ÙÀ½°ú °°Àº °æ¿ì round-robinÀ» »ç¿ëÇÏ¸é ¹®Á¦°¡¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.

  ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù´Â ¸»Àº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù´Â ¸»ÀÌ ¾Æ´Õ´Ï´Ù. µ¿ÀÛÀº ÇÏÁö¸¸ ºÒÇÊ¿äÇÑ trafficÀÌ ¹ß»ýÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
Windows¸¦ Æ÷ÇÔÇÑ ¸¹Àº È£½ºÆ®¸¦ ¼­ºñ½º ÇØ¾ß ÇÑ´Ù¸é round-robin º¸´Ù´Â netmask³ª source-hash¸¦ »ç¿ëÇϴ°ÍÀÌ À¯¸®ÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡µµ telnet, smtp, pop°°Àº trafficÀº round-robinÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

8. rc.conf/rc.localÀÇ ¼³Á¤

FreeBSD pf´Â rc system¿¡¼­ ¾ÆÁ÷ Áö¿øµÇÁö ¾Ê±â ¶§¹®¿¡ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÕ´Ï´Ù.

</etc/rc.conf>

......
defaultrouter="NO"
hostname="yourhostname"
ifconfig_fxp0="inet 192.168.10.2  netmask 255.255.255.0"
ifconfig_fxp1="up"
ifconfig_fxp2="up"
gateway_enable="YES"
......

</etc/rc.local>
#
# Load PF
#
#
# Load PF
#
if ! /sbin/kldstat |grep -w pflog.ko >/dev/null; then
    /sbin/kldload pflog
    /sbin/ifconfig pflog0 up
fi
if ! /sbin/kldstat |grep -w pfsync.ko >/dev/null; then
    /sbin/kldload pfsync
    /sbin/ifconfig pfsync0 up
fi
if [ ! -f /var/log/pflogd.pid ]; then
    /sbin/pflogd
fi
if ! /sbin/kldstat |grep -w pf.ko >/dev/null; then
    /sbin/kldload pf
fi
/sbin/pfctl -e

#
# Kernel mode PPPoE setup
#
/usr/bin/killall mpd
if [ -f /tmp/.mpd-linkup1 ]; then
    /bin/rm -f /tmp/
.mpd-linkup1
fi
if [ -f /tmp/
.mpd-linkup2 ]; then
    /bin/rm -f /tmp/
.mpd-linkup2
fi
if [ -x /usr/local/sbin/mpd -a -f /usr/local/etc/mpd/mpd.conf ]; then
    if ! /sbin/kldstat |grep -w ng_ether.ko >/dev/null; then
        /sbin/kldload ng_ether
    fi
    echo -n " mpd"; /usr/local/sbin/mpd -b
fi

$Id: multiple-route.html,v 1.5 2003-07-30 17:26:05+09 yongari Exp $