ãããã³ã°
ãããã£ãŠãU32ãã£ã«ã¿ãŒã®äž»ãªæ©èœã¯ããã±ããããããŒã¿ã®ãããã¯ãååŸããæå®ãããå€ãšæ¯èŒããããšã§ãã å€ãäžèŽãããšãããã±ãŒãžã«å¯ŸããŠããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ããã±ãŒãžå ã®ããŒã¿ãããã¯ã¯ã次ã®ãã©ã¡ãŒã¿ãŒã«ãã£ãŠæå®ãããŸãã
- ããŒã¿ãããã¯ã®ãµã€ãºã ãã©ã¡ãŒã¿u32 / u16 / u8ã«ãã£ãŠæ±ºå®ãããŸãã çŽèŠ³çã«ã¯ãæ°åã¯ãããåäœã®ãããã¯ã®é·ãã§ãã ã«ãŒãã«ã¯32ããããããã¯ã§åäœããŸãã tcã§ã¯ããããã¯é·ã8ã16ã32ãããã«èšå®ã§ããŸãã
- ããããã¹ã¯ã ããã¯ãããŒã¿ãããã¯å šäœã§ã¯ãªããåã ã®ãããã®ã¿ããã§ãã¯ããå¿ èŠãããå Žåã«å¿ èŠã§ãã åœç¶ããã¹ã¯ã®é·ãã¯ãããã¯ã®é·ããšäžèŽããå¿ èŠããããŸãã ãããããšã®ANDæŒç®ã䜿çšããŠãããã¯ã«ãã¹ã¯ãé©çšããããã®æŒç®ã®çµæã¯ãã§ã«èšå®å€ãšæ¯èŒãããŠããŸãã
- ãã±ããã®éå§ããã®ãªãã»ããã ãã¹ãŠã®ãªãã»ããã¯32ãããå¢çã§æŽåãããŸãã ãã¹ãŠãèŠããã»ã©æçœã§ã¯ãªããããããã«ã€ããŠã¯åŸã§èª¬æããŸãããä»ã®ãšããã¯ãã®åçŽåã§ååã§ãã ã»ãšãã©ã®å ŽåããŒãã®ãªãã»ããã¯ããããã¯ãŒã¯å±€ããããŒã®å é ã«å¯Ÿå¿ããŸãã IPv4 / IPv6ãã±ããã®å é ã
ããšãã°ã次ã®tcã³ãã³ãã®äŸãèŠãŠãã ããã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ u32 \ match u32 0xc0a80100 0xffffff00 at 12 \ classid 1:8
åªå 床10ã®ã¿ã€ãu32ã®ãã£ã«ã¿ãŒããeth0ã®èŠåŸ1ïŒ0ã«è¿œå ããŸãã æ¯èŒãæåãããšãããã±ãŒãžã¯ã¯ã©ã¹1ã«åé¡ãããŸãã8ã 7è¡ç®ã¯ç¹ã«èå³æ·±ãã®ã§ã詳现ã«æ€èšããŸãã
- match u32-äžèŽæ¡ä»¶ã®éå§ãšãã±ããããååŸããããŒã¿ãããã¯ã®ãµã€ãºãèšå®ããŸãã
- 0xc0a80100ã¯ããã±ããã®ããããæ¯èŒããå€ã§ãã
- 0xffffff00ã¯ããã±ããã®ããŒã¿ã«ã¹ãŒããŒã€ã³ããŒãºãããããããã¹ã¯ã§ãããçµæã¯ãã§ã«èšå®ãããã®ãšæ¯èŒãããŸãã å€ãšãã¹ã¯ãããããŒã¿ãããã¯ãçããå Žåãç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ã»ãšãã©ã®å Žåããã®ã¢ã¯ã·ã§ã³ã¯ããã±ãŒãžã®åé¡ã«ãªããŸãã
- at 12-ããŒã¿ãããã¯ã®å é ãäœçœ®ããå é ããã®ãªãã»ããã ãã®ãã©ã¡ãŒã¿ãŒãæå®ãããŠããªãå Žåããªãã»ããã¯ãŒããšèŠãªãããŸãã ãã£ã«ã¿ãŒã®æåã®éšåã§ã¯ããŒãå¢çã¯IPv4ãªã©ã®ãããã¯ãŒã¯ã¬ã€ã€ãŒããããŒã®å§ãŸããšèŠãªãããŸãã è² ã®ãªãã»ãããå¯èœã§ãã
ãããã®æé ã§ã¯ããœãŒã¹ã¢ãã¬ã¹ã確èªãïŒIPv4ããããŒã®åœ¢åŒãèŠããšç¢ºèªã§ããŸãïŒãããã192.168.1.0/24ãµããããã«å±ããŠããå Žåããã±ããã1ïŒ8ã¯ã©ã¹ã«éä¿¡ããŸãã ãã¡ãããRFCã絶ããæãäžããããšã¯é¢åã§ããããã¹ãŠã®ãã€ã¢ã¹ã念é ã«çœ®ãããšã¯å°é£ã§ãããã®ãããtcã¯ãã䜿çšãããã±ãŒã¹ã«æ§æç³è¡£ãæäŸããŸãã ããšãã°ã次ã®ããã«èšè¿°ããå Žåããã®äŸã¯ããæ確ã«ãªããŸãã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ u32 \ match ip src 192.168.1.0/24 \ classid 1:8
1ã€ã®ã³ãã³ãã§è€æ°ã®ãäžèŽããã©ã¡ãŒã¿ãŒãæå®ã§ãããã¹ãŠã®æ¡ä»¶ãæºããããå Žåã«ã®ã¿äžèŽãæåããŸãã éä¿¡å ã¢ãã¬ã¹ã192.168.1.0/24ã§ãToSå€ã0x10ïŒã€ã³ã¿ã©ã¯ãã£ããã©ãã£ãã¯ïŒã§ãããã¹ãŠã®ãã±ãããã¯ã©ã¹1ïŒ1ïŒã«éä¿¡ããŸãããã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ u32 \ match ip src 192.168.1.0/24 \ match ip tos 0x10 0x1e \ classid 1:1
ãã¹ãŠãæ£åžžã«æ©èœãããã©ããã確èªããŸãã
# ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 (rule hit 1911 success 0) match c0a80100/ffffff00 at 12 (success 0 ) match 00100000/001e0000 at 0 (success 0 ) # -p, tc # , - ~$ tc -s -pf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 (rule hit 3413 success 0) match IP src 192.168.1.0/24 (success 0 ) (success 0 ) # - ToS $ ping -f -I 192.168.1.1 -Q 0x10 www.ya.ru PING ya.ru (93.158.134.3) from 192.168.1.1 : 56(84) bytes of data. --- ya.ru ping statistics --- 107 packets transmitted, 107 received, 0% packet loss, time 619ms rtt min/avg/max/mdev = 4.492/5.240/7.560/0.536 ms, ipg/ewma 5.842/5.403 ms #, ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 (rule hit 354903 success 107) match c0a80100/ffffff00 at 12 (success 107 ) match 00100000/001e0000 at 0 (success 107 )
ã芧ã®ãšããããã¹ãŠãæ£åžžã«æ©èœããŸããããã±ãŒãžã¯ç®çã®ã¯ã©ã¹ã«ãªããŸãã ããããtcã®åºåã泚ææ·±ãèŠããšãããã€ãã®ç¹ããŸã äžæã§ãã ããšãã°ããããã®äžå¯è§£ãªfhå€ã¯800 :: 800ã§ãã ãããã¯ããããããã³ãã«ïŒè±èªã®ããã³ãã«ãããã®ãã¬ãŒã¹ïŒ-U32å ã®ãã£ã«ã¿ãŒèå¥åã§ãã
åã ã®ãã£ã«ã¿ãŒã®åãã³ãã«ã¯ã3ã€ã®16é²æ°ã§æ§æãããã€ã³ã¿ãŒãã§ã€ã¹ã®U32ãã£ã«ã¿ãŒã¹ããŒã¹å ã§äžæã§ãã ç§ãã¡ã®å Žåãããã¯ãã³ãã«800 :: 800ã§ãã ããã§ãæåŸã®æ°åïŒè¿œå ããããã£ã«ã¿ãŒã®çªå·ïŒã®ã¿ã«é¢å¿ããããŸãã æå®ããªãå Žåãã·ã¹ãã èªäœããããå²ãåœãŠãŸã-æãå€ããã®ã®æ¬¡ã0x800ããéå§ããŸãã ãã£ã«ã¿ãŒçªå·ã®ç¯å²ã¯0x001ã0xfffã§ãã é©åãªãã©ã¡ãŒã¿ãŒã䜿çšããŠããã£ã«ã¿ãŒçªå·ãæåã§æå®ã§ããŸãã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::1 \ u32 \ match ip src 192.168.1.0/24 \ match ip tos 0x10 0x1e \ classid 1:1
ãã£ã«ã¿ã¯çªå·é ã«å®è¡ãããŸãã
ãã€ã³ãã£ã³ã°
2ã€ã®ãã£ã«ã¿ãŒãè¿œå ããŸãããã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::1 \ u32 \ match ip src 192.168.1.0/24 \ match ip tos 0x10 0x1e \ classid 1:1 tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::2 \ u32 \ match ip src 192.168.1.0/24 \ match ip tos 0x08 0x1e \ classid 1:2
äž¡æ¹ã®ãã£ã«ã¿ãŒã«ã¯ãåããã¬ãã£ãã¯ã¹ïŒãã³ãã«ã®æåã®2ã€ã®æ°åïŒ800ïŒ0ïŒïŒãä»ããŸãã çªå·-ãã³ãã«ã®æåŸã®çªå·ã®é ã«ããããæžãçãããšæ³åãããšããã£ã«ã¿ãŒã®ãªã¹ããåŸãããŸãïŒ
800ïŒ0ãªã¹ãïŒ :: 1-ip src 192.168.1.0/24 tos 0x10-> classid 1ïŒ1 :: 2-ip src 192.168.1.0/24 tos 0x08-> classid 1ïŒ2
1ã€ã®ãªã¹ãã®ãã£ã«ã¿ãŒã§ã¯ããã³ãã«ã¯æåŸã®æ°åã§ã®ã¿ç°ãªãããããªã¹ãèªäœã¯ããã³ãã«ã®æåã®2ã€ã®æ°å-ãã¬ãã£ãã¯ã¹ïŒ800ïŒ0ïŒã§èå¥ã§ããŸãã åè¿°ã®ããã«ããã£ã«ã¿ãŒã¯åŸãé åºã§å®è¡ãããŸãã ããããã®ãã£ã«ã¿ãŒã§äžèŽãæåããå Žåãäœããã®ã¢ã¯ã·ã§ã³ãå®è¡ãããU32ãçµäºããŸãã ãªã¹ãã®æåŸã«å°éããäžèŽãããã®ã1ã€ãåä¿¡ããŠããªãå ŽåãU32ãã£ã«ã¿ãŒã¯æªåé¡ã®ãã±ãããå é ã«è¿ããŸãã
åé¡ã«å ããŠãã¢ã¯ã·ã§ã³ã¯ãããã±ãŒãžããã§ãã¯ããããã®å¥ã®ãã£ã«ã¿ãŒãªã¹ããžã®ç§»è¡ã«ãªããŸãã ããã¯ã次ã®ããã«ããclassidãã§ã¯ãªããlinkããã©ã¡ãŒã¿ã䜿çšããŠè¡ãããŸãïŒãclassidããã©ã¡ãŒã¿ãæå®ãããŠããŠãç¡èŠãããŸãïŒã
tc filter add \ dev eth0 \ parent 1: \ prio 10 \ protocol ip \ handle ::2 \ u32 \ match ip src 192.168.1.0/24 \ link 1:
ãã±ããã«ãµãããã192.168.1.0/24ããã®éä¿¡å ã¢ãã¬ã¹ãããå Žåã1ã®ãã³ãã«ã§ãã£ã«ã¿ãŒãªã¹ãã®ãã§ãã¯ãéå§ãããŸãïŒ0ã æåããæ¯èŒããªãå Žåãåã®ãªã¹ã800ïŒ0ã«æ»ãããã§ãã¯ãç¶ããŸãã åæ§ã«ã1ïŒ0ãªã¹ãããã®ãã£ã«ã¿ãŒã¯ä»ã®ãªã¹ãã«ããŸã3çªç®ãªã©ã®ãªã¹ãã«é·ç§»ã§ããŸãã ãã®ãããæ倧7ã€ã®é·ç§»ïŒããã§ã¯äžååãªå Žåãã«ãŒãã«ãœãŒã¹ã®ãã¯ã眮æTC_U32_MAXDEPTHãå€æŽã§ããŸãïŒã
ãŸããå€æ°ã®ãã£ã«ã¿ãŒãå€æ°ã®ãªã¹ãã«åå²ãããã®ãããªãã©ã³ãžã·ã§ã³ãå¹³åçã«æŽçããããšã¯ã1ã€ã®å€§ããªãªã¹ãã«å¯ŸããŠãã§ãã¯ãããããã¯ããã«é«éã§ã¯ãªãããšãèæ ®ã«å ¥ããå¿ èŠããããŸãã ãã ããååãšããŠããã€ã³ãã£ã³ã°ã¯å¥ã®U32ã¡ã«ããºã ïŒããã·ã¥ïŒãšçµã¿åãããŠäœ¿çšââãããŸãã
ããã·ã³ã°
ãã®åã«ããã£ã«ã¿ãŒãªã¹ããèŠãŸããã ãããå®éã«ã¯ããããã¯ããã·ã¥ããŒãã«ãšåŒã°ãããã倧ããªæ§é ã®äžéšã«ãããŸããã ãã®å Žåãããã·ã¥ããŒãã«ã¯ã»ã«ã®1次å é åïŒãã±ããã®è±èªé åïŒã§ãããããããã«1ã€ã®ãã£ã«ã¿ãŒãªã¹ããæ ŒçŽãããŸãã
ãã³ãã«ã§ã¯ãæåã®çªå·ã ããããã·ã¥ããŒãã«çªå·ã§ããã2çªç®ã¯ã»ã«çªå·ã§ãã ããã·ã¥ããŒãã«çªå·ã®ç¯å²ã¯0x000ã0xfffã§ãã»ã«çªå·ã®ç¯å²ã¯0x00ã0xffã§ãã ã»ã«ã®æ°ã¯1ã256ã§ã2ã®çŽ¯ä¹ã§ãªããã°ãªããŸããïŒå¥ã®å€ãèšå®ããããšã¯ã§ããŸãã-tcã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸãïŒã çªå·0x800ã®ããã·ã¥ããŒãã«ã¯ã«ãŒããšåŒã°ãã1ã€ã®ã»ã«ã§æ§æãããèªåçã«äœæãããŸãã ããã±ãŒãžãã§ãã¯ã¯ãåžžã«ã»ã«800ã®ãªã¹ãã調ã¹ãããšããå§ãŸããŸãïŒ0ã
次ã®ãããªè¿œå ã®ããã·ã¥ããŒãã«ãäœæã§ããŸãã
tc filter add \ dev eth0 \ parent 1: pref 10 \ protocol ip \ handle 1: \ u32 divisor 1
ããã§ãããã³ãã«1ïŒãã¯ããã·ã¥ããŒãã«ã®çªå·ãèšå®ãããé€æ°1ã-ãã®äžã®ã»ã«ã®æ°ïŒãã®å Žåãçªå·1ã®ããã·ã¥ããŒãã«ã«ã¯ããã£ã«ã¿ãŒãªã¹ã1ïŒ0ãé 眮ãããã»ã«ã1ã€ã ããããŸãïŒã
ãªã¹ãã®ãžã£ã³ãã䜿çšããŠããœãŒã¹ã¢ãã¬ã¹ãšToSãã£ãŒã«ãã«ããåé¡ã§äŸãæ¡åŒµããŸãã
# prio ~$ tc q add \ dev eth0 \ root \ est 0.1s 10s \ handle 1: \ prio bands 8 # - 1: ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle 1: \ u32 \ divisor 1 # - ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::1 \ u32 \ match ip src 192.168.1.0/24 \ link 1: # ToS - 1: ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::1 \ u32 \ ht 1: \ match ip tos 0x08 0x1e \ classid 1:3 ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::2 \ u32 \ ht 1: \ match ip tos 0x10 0x1e \ classid 1:1 # , , #, ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::2 \ u32 \ match ip src 192.168.1.0/24 \ classid 1:7 # ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 1::1 order 1 key ht 1 bkt 0 flowid 1:3 (rule hit 0 success 0) match 00080000/001e0000 at 0 (success 0 ) filter parent 1: protocol ip pref 10 u32 fh 1::2 order 2 key ht 1 bkt 0 flowid 1:1 (rule hit 0 success 0) match 00100000/001e0000 at 0 (success 0 ) filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::1 order 1 key ht 800 bkt 0 link 1: (rule hit 33900 success 0) match c0a80100/ffffff00 at 12 (success 0 ) filter parent 1: protocol ip pref 10 u32 fh 800::2 order 2 key ht 800 bkt 0 flowid 1:7 (rule hit 3583 success 0) match c0a80100/ffffff00 at 12 (success 0 ) # , #ToS 192.168.1.0/24, ~$ ping -fc10 -I 192.168.1.1 -Q 0x08 8.8.8.8 ~$ ping -fc15 -I 192.168.1.1 -Q 0x10 www.kernel.org ~$ ping -fc25 -I 192.168.1.1 -Q 0xaa www.habrahabr.ru # ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 1::1 order 1 key ht 1 bkt 0 flowid 1:3 (rule hit 50 success 10) match 00080000/001e0000 at 0 (success 10 ) filter parent 1: protocol ip pref 10 u32 fh 1::2 order 2 key ht 1 bkt 0 flowid 1:1 (rule hit 40 success 15) match 00100000/001e0000 at 0 (success 15 ) filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::1 order 1 key ht 800 bkt 0 link 1: (rule hit 578192 success 0) match c0a80100/ffffff00 at 12 (success 50 ) filter parent 1: protocol ip pref 10 u32 fh 800::2 order 2 key ht 800 bkt 0 flowid 1:7 (rule hit 547850 success 25) match c0a80100/ffffff00 at 12 (success 25 )
ããããããªã³ã¯ããã©ã¡ãŒã¿ãŒã䜿çšãããšãã»ã«çªå·0ã«ãããã£ã«ã¿ãŒãªã¹ãã«ã®ã¿ç§»åã§ããŸããããã§ã¯ãä»ã®ã»ã«ã®ãªã¹ããã©ã®ããã«ç¢ºèªã§ããŸããïŒ ãããè¡ãã«ã¯ãhashkeyãã©ã¡ãŒã¿ãŒãšããã·ã¥ã¡ã«ããºã ã䜿çšãããŸãã U32ã§ã®ããã·ã¥ã®æå³ã¯ãã·ã¹ãã ããã±ããã®ããŒã¿ã«åºã¥ããŠãªã¹ãã«ã»ã«ã®çªå·ãåãåãããšã§ãã ããã¯ããã§ãã¯ã®åæ°ãæžããããã«å¿ èŠã§ãã 衚瀺æéã¯ãªã¹ãå ã®ãã£ã«ã¿ãŒã®æ°ã«ç·åœ¢ã«äŸåãããªã¹ããšã¯ç°ãªããããã·ã¥ã¯äžå®æéïŒããã«éåžžã«çãæéïŒå®è¡ãããŸãã å€æ°ã®ãã£ã«ã¿ãŒã䜿çšããŠãããã·ã¥ã䜿çšãããšããªã¹ããšé·ç§»ã®ã¿ã䜿çšãããããæ¡éãã«é«ãããã©ãŒãã³ã¹ãå®çŸã§ããŸãã
ããã·ã¥ã䜿çšããŠåã®äŸãæžãçŽããŸãã
# - 1: 32 ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle 1: \ u32 \ divisor 32 # ToS ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle 1:08:1 \ u32 \ ht 1:08 \ match u32 0 0 \ classid 1:3 ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle 1:10:1 \ u32 \ ht 1:10 \ match u32 0 0 \ classid 1:1 # 192.168.1.0/24 # - 1: ToS ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::1 \ u32 \ match ip src 192.168.1.0/24 \ link 1: \ hashkey mask 0x001f0000 at 0 # , # ~$ tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle ::2 \ u32 \ match ip src 192.168.1.0/24 \ classid 1:7 # ToS ~$ ping -fc10 -I 192.168.1.1 -Q 0x08 8.8.8.8 ~$ ping -fc30 -I 192.168.1.1 -Q 0x10 www.kernel.org ~$ ping -fc50 -I 192.168.1.1 -Q 0xaa www.habrahabr.ru # ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 32 filter parent 1: protocol ip pref 10 u32 fh 1:8:1 order 1 key ht 1 bkt 8 flowid 1:3 (rule hit 10 success 10) match 00000000/00000000 at 0 (success 10 ) filter parent 1: protocol ip pref 10 u32 fh 1:10:1 order 1 key ht 1 bkt 10 flowid 1:1 (rule hit 30 success 30) match 00000000/00000000 at 0 (success 30 ) filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::1 order 1 key ht 800 bkt 0 link 1: (rule hit 30135 success 0) match c0a80100/ffffff00 at 12 (success 90 ) hash mask 001f0000 at 0 filter parent 1: protocol ip pref 10 u32 fh 800::2 order 2 key ht 800 bkt 0 flowid 1:7 (rule hit 27250 success 50) match c0a80100/ffffff00 at 12 (success 50 )
ãã®äŸã®ããã·ã¥ã¢ã«ãŽãªãºã ãæ€èšããŠãã ããã ãã®ã¢ã«ãŽãªãºã ã¯ã«ãŒãã«ããŒãžã§ã³2.6ã§å°å ¥ããããŸã å€æŽãããŠããŸããïŒã«ãŒãã«ããŒãžã§ã³2.4ã§ã¯ã¢ã«ãŽãªãºã ãç°ãªããŸãïŒã
- ãããã·ã¥ããŒããã©ã¡ãŒã¿ã§æå®ããããã¢ããããªãã»ããã§32ãããã¯ãŒããååŸããŸãã ãªãã»ããã¯ãŒããªã®ã§ãIPãã±ããã®æåã®32ããããååŸãããŸãã
- åããã©ã¡ãŒã¿ãŒããããããã¹ã¯ãé©çšããŸãã ããããã¹ã¯ã¯ã0x001f0000ãã§ãToSãã£ãŒã«ãã®äœçœ®ã«å¯Ÿå¿ããŠããŸãã
- çµæãæäžäœãããã®æ¹åã«nãããã ãã·ããããŸãã nã®å€ã¯ãã¹ã¯ããèšç®ããããã®äžã®æäžäœãŒããããã®æ°ã«çãããªããŸãã ãã¹ã¯ã§ã¯ãæäžäœãŒããããã®æ°ã¯16ã§ããããã¯ããã¹ã¯ãããããã«ã¯ãŒãããããã®16ãããã ãã·ãããããããšãæå³ããŸãã ãã®åŸãToSå€ãäž5æ¡ã«è¡šç€ºãããŸãã
- çµæã®å€ã«0xffãã¹ã¯ãé©çšããŸãã ãã®å Žåãäœãå€æŽãããŸããã ä»ã®å Žåãããã¯ãã€ããŒãé€ããã¹ãŠã®ãªã¯ãããããªã»ããããŸãã
- æåŸã«ãã¿ãŒã²ããããŒãã«ã®ã»ã«æ°ã256æªæºã®å Žåãçµæã«æ°å€kã«çããããããã¹ã¯ãéããããŸãã kã®å€ã¯ã移è¡å ã®ããã·ã¥ããŒãã«ã®ã»ã«ããã1ã€å°ãããªããŸãã ã¿ãŒã²ããããŒãã«ã«ã¯32åã®ã»ã«ããããŸããã€ãŸããkã®å€ã¯31ã«ãªããŸãããã®ãã¹ã¯ãé©çšãããšãçµæã¯ã»ã«ã®æ°ä»¥äžã«ãªãããšãä¿èšŒãããŸãã
æ®å¿µãªããããã®å Žåãtcã¯ãªãã»ããã®æžã蟌ã¿ãåçŽåããæ段ãæäŸããªãããããhashkey ip tosãã®ãããªãã®ãæžã蟌ãããšã¯ã§ããŸããã ãã1ã€ã®é£ç¹ã¯ããã£ã«ã¿ãŒãé 眮ããååããã¯ã¹ã決å®ããããšã§ãã æ¹æ³ã¯1ã€ãããããŸãã-æåã§ããã·ã¥ãèªã¿åãæ¹æ³ïŒtcã«ã¯ããsampleããã©ã¡ãŒã¿ãŒããããç®çã®ã»ã«ã«ãã£ã«ã¿ãŒãé 眮ããããã«ããã·ã¥ãèªåçã«èšç®ã§ããŸãããããã·ã¥ã¢ã«ãŽãªãºã ã¯ã«ãŒãã«2.4ããã³ãã以éã®ã«ãŒãã«ã«ã¯ãŸã é©ããŠããŸããïŒ
ãªãã»ãã
ããããŒã®é·ããåºå®ãããŠããã°ããã¹ãŠãåçŽã«ãªããŸãã ããããæ®å¿µãªãããããã¯ããã§ã¯ãããŸãã-ããããŒã«ã¯è¿œå ã®ãªãã·ã§ã³èŠçŽ ãããã次ã®ã¬ãã«ã®ããããŒã®ãã£ãŒã«ããæ¯èŒããããšãéåžžã«é£ãããªããŸãã 幞ããªããšã«ãU32ã¯ãããæäŸããŸãã ãã®é¢æ°ã¯ãããããŒãªãã»ããããšåŒã°ããããã±ãŒãžèªäœãã次ã®ããããŒã®ãªãã»ãããèŠã€ããããã«èšèšãããŠããŸãã
ããããæåã«ãU32ãã£ã«ã¿ãŒã®2ã€ã®æ°ããæŠå¿µãç解ããŸããããå®æ°ãªãã»ããïŒç°¡æœã«ããããã«ãpermoffããšæå®ããŸãïŒãšäžæçãªå€äœïŒãtempoffããšæå®ããŸãïŒã§ãã permoffå€ã¯ããlinkããã©ã¡ãŒã¿ãŒã䜿çšããŠè¡ããã次ã®é·ç§»ããã³ãã以éã®é·ç§»äžã«ãã¹ãŠã®ãªãã»ããã«åžžã«è¿œå ãããæ°ããpermoffããã³tempoffå€ã®èšç®ã«äœ¿çšãããŸãã ããŒã¯ãŒããnexthdr +ãããã©ã¡ãŒã¿ãŒã§äœ¿çšããããã以äžã®ç§»è¡ã®åœ±é¿ãåããªãå Žåãtempoffå€ã¯æ¬¡ã®ç§»è¡äžã«ã®ã¿æå®ããããªãã»ããã«è¿œå ãããŸãã åã®ãªã¹ãã«æ»ããšãå€ã¯ããŒã«ããã¯ãããŸãã
å°ããªä»®èª¬çãªäŸãèããŠã¿ãŸãããã ãªã¹ã1ïŒ0ãå®è¡ãããšãã«permoffããŒãã«ãããšãäžèŽãæåããŸãã ãªã¹ã2ã®å®è¡ã«é²ããšãæ°ããpermoffå€ã¯20ã«çãããªããŸãã ãã®å Žåãå€20ã¯ã2ïŒ5ãªã¹ãã®ãã£ã«ã¿ãŒã«ç€ºãããŠãããã¹ãŠã®ãªãã»ããã«è¿œå ãããŸã2ïŒ2ïŒ5ãªã¹ãã§ã3ïŒ12ãªã¹ããžã®é·ç§»ãšã®å¥ã®äžèŽããããå®æ°ãªãã»ããã8ã«å€æŽããããšãæ°ãããããŠãpermoffå€ã¯28ã«ãªããŸãããªã¹ã3:12ãå®è¡ãããšãå€28ã¯ãã¹ãŠã®ãªãã»ããã«æ¢ã«è¿œå ãããŸãããªã¹ã3:12ã«æåããæ¯èŒããªãå ŽåãU32ã¯ãªã¹ã2ïŒ5ã«æ»ããpermoffã¯åã³20ã«ãªããŸãããããŠæåããæ¯èŒã¯ãããŸããããããŠãªã¹ã1ã«æ»ããŸãïŒ0ãããããpermoffã¯åã³çãããªããŸã ãã«ãŒãã å®éããŒãããŒã¯ãåçŽã«ã·ããããããã«å¯ŸããŠãªãã»ãããããã«ç€ºããŸãã permoffãštempoffã®å€ã¯ãæåã¯ãŒãã§ãã
RFCãèŠãŠãIPv4ããããŒåœ¢åŒãèŠãŠãã ããã 幞ããªããšã«ããã®ãã£ãŒã«ãã«ã¯ç¹å¥ãªãã£ãŒã«ããããããã®å€ã¯ããã«ã¯ãŒãã§ã®ã¿ã€ãã«ã®é·ããšåãã§ãã ãããŠããã®ããã«ãã®æ å ±ã䜿çšã§ããŸãã 次ã®ã¬ãã«ã®ããããŒã®äœçœ®ãèšç®ããŸãã
ããã¯æ¬¡ã®ããã«è¡ãããŸãã
tc filter add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ u32 \ match ip src 192.168.1.0/24 \ match protocol 0x01 0xff \ link 1: \ offset at 0 mask 0x0f00 shift 6 plus 0 eat
æåŸã®è¡ãšäœãèµ·ãããã詳ããèããŠã¿ãŸãããïŒ
- offset-ãããã³ã°ãæåãããšãã«permoffãŸãã¯tempoffã®å€ãå€æŽããŠããããšã瀺ããŸãã
- ãatããã©ã¡ãŒã¿ã§æå®ããããªãã»ããã§åäžã®åèªãååŸãããŸãã ç§ãã¡ã®å Žåãããã¯ãŒãã§ããããããã±ããã®æåã®16ããããååŸãããŸãã ãatããã©ã¡ãŒã¿ã®å€ã¯2ã®åæ°ã«æžå°ããŸãã
- ããããã¹ã¯ã¯ããã±ããããåä¿¡ããå€ã«éç³ãããŸãã ããã¯ãIPv4ããããŒé·ãã£ãŒã«ãã®äœçœ®ã«å¯Ÿå¿ãã0x0f00ã«çãããªããŸãã ãã®ãã£ãŒã«ãã«å€5ïŒãã€ããªè¡šçŸ0101ïŒããããšããŸãã ãã€ããªåœ¢åŒã§ã¯ã以åã®æäœã®çµæã¯ã0000.0101.0000.0000ãã«çãããªããŸãã
- IPããããŒé·ãã£ãŒã«ãã®å€ã¯ãããã«ã¯ãŒãã§è¡šããããããŒã®é·ããšçããããšãããã£ãŠããŸãã ãã®ãããååŸããå€ãäœããã®æ¹æ³ã§ãã€ãã«å€æããå¿ èŠããããŸãã ãã®çµæãå¿ èŠãªããããããã«ãªãã»ããããããããåé¡ã¯è€éã§ãã äžäœãªã¯ãããã«è¡šç€ºãããããã«å€ãã·ããããŸããäžäœãããã«8ãããã·ããããã0000.0000.0000.0101ããååŸããŸãã èŠåºãã®ãµã€ãºã¯ããã«ã¯ãŒãã§ç€ºãããŠãããããããã§4ãæããŸãã ä¹ç®ã¯ãäžäœãããã®æ¹åã«2ãããã·ããããããšã§çœ®ãæããããŸãã ã·ããåŸãã0000.0000.0001.0100ããåŸãããŸãã é©åãªå€ãååŸããŸããã äž¡æ¹ã®ã·ããæäœã1ã€ã«çµåããŸãã ãã®çµæãããããŒã®é·ãããã€ãåäœã§ååŸããã«ã¯ããã¹ã¯ãããåæå€ãæäžäœãããã®æ¹åã«6ãããã·ããããå¿ èŠããããŸãã ããã¯ããshiftããã©ã¡ãŒã¿ãŒã䜿çšããŠè¡ãããŸãã ãã¹ãŠã®æäœã®åŸãå€ã¯20ã«ãªããŸããã
- plusãã©ã¡ãŒã¿ãŒã®å€ã¯ãååŸããå€ã«è¿œå ãããŸãã ç§ãã¡ã®å Žåãããã¯0ãªã®ã§ãäœãè¿œå ãããŸããã ãã®ãã©ã¡ãŒã¿ãŒãæå®ããããšããã§ããŸããã§ããã
- eatãã©ã¡ãŒã¿ãŒã¯ãèšç®ãããå€ãpermoffå€ã«è¿œå ãããããšã瀺ããŠããŸãã ãã以å€ã®å Žåãtempoffå€ãèšç®ãããŸãã
- ãã®çµæã1ïŒ0ãªã¹ããããã£ã«ã¿ãŒããã§ãã¯ãããšãããŒããªãã»ããã¯æ¬¡ã®ããããŒã®å é ã«å¯Ÿå¿ããäžèŽããICMPããããŒãã£ãŒã«ãã«åºã¥ããŠãã£ã«ã¿ãŒãæ§ç¯ã§ããŸããããšãã°ãã¡ãã»ãŒãžã¿ã€ãå€ããã§ãã¯ããŸãã tempoffå€ãå€æŽããå Žåã¯ããnexthdr +ãããŒã¯ãŒãã䜿çšããŠãªãã»ãããæå®ããçä¿¡ãªã¹ãã§æ瀺çã«æå®ããå¿ èŠããããŸãã
ãã®åŸãICMPã¡ãã»ãŒãžã¿ã€ãã1ïŒ0ãªã¹ãã«äžèŽãããã£ã«ã¿ãŒãè¿œå ã§ããŸãã ããšãã°ãã¿ã€ãEcho-Requestã®ICMPãã±ããã¯ã¯ã©ã¹1ã«éä¿¡ãããŸãã8ã
~$tc f add \ dev eth0 \ parent 1: \ pref 10 \ protocol ip \ handle 1::1 \ u32 \ ht 1: \ match u8 0x08 0xff \ classid 1:8 # ~$ sudo tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 1::1 order 1 key ht 1 bkt 0 flowid 1:8 (rule hit 0 success 0) match 08000000/ff000000 at 0 (success 0 ) filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::1 order 1 key ht 800 bkt 0 link 1: (rule hit 48553 success 0) match c0a80100/ffffff00 at 12 (success 0 ) match 00010000/00ff0000 at 8 (success 0 ) offset 0f00>>6 at 0 eat # - ~$ ping -fc5 -I 192.168.1.1 www.ixbt.com # ~$ tc -sf ls dev eth0 filter parent 1: protocol ip pref 10 u32 filter parent 1: protocol ip pref 10 u32 fh 1: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 1::1 order 1 key ht 1 bkt 0 flowid 1:8 (rule hit 5 success 5) match 08000000/ff000000 at 0 (success 5 ) filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 10 u32 fh 800::1 order 1 key ht 800 bkt 0 link 1: (rule hit 149972 success 0) match c0a80100/ffffff00 at 12 (success 5 ) match 00010000/00ff0000 at 8 (success 5 ) offset 0f00>>6 at 0 eat
ããã ãã§ãããªãªãžãã«ã«ã¯ãããã«è©³ããæ å ±ããããŸã-ãã©ã€ã¬ã€ããšæ¯èŒã®ãªã¹ãïŒåãæ§æã®ç ç³ïŒã
ãªãªãžãã«-u32ãã£ã«ã¿ãŒã-æ®å¿µãªãããèè ã¯ç§ã«ã¯ç¥ãããŠããªããããã¹ãŠãã©ãã»ã«ã»ã¹ãã¥ã¯ãŒããæããŠããã