ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ืฉืœื•ื ืœื›ื•ืœื! ืฉืžื™ ื“ืžื™ื˜ืจื™ ืกืžืกื•ื ื•ื‘, ืื ื™ ืขื•ื‘ื“ ื›ืžื ื”ืœ ืžืขืจื›ืช ืžื•ื‘ื™ืœ ื‘- Odnoklassniki. ื™ืฉ ืœื ื• ื™ื•ืชืจ ืž-7 ืืœืฃ ืฉืจืชื™ื ืคื™ื–ื™ื™ื, 11 ืืœืฃ ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ืขื ืŸ ืฉืœื ื• ื•-200 ืืคืœื™ืงืฆื™ื•ืช, ืืฉืจ ื‘ืชืฆื•ืจื•ืช ืฉื•ื ื•ืช ื™ื•ืฆืจื•ืช 700 ืืฉื›ื•ืœื•ืช ืฉื•ื ื™ื. ื”ืจื•ื‘ ื”ืžื›ืจื™ืข ืฉืœ ื”ืฉืจืชื™ื ืžืจื™ืฆื™ื CentOS 7.
ื‘-14 ื‘ืื•ื’ื•ืกื˜ 2018 ืคื•ืจืกื ืžื™ื“ืข ืขืœ ืคื’ื™ืขื•ืช FragmentSmack
(CVE-2018-5391) ื•- SegmentSmack (CVE-2018-5390). ืžื“ื•ื‘ืจ ื‘ื ืงื•ื“ื•ืช ืชื•ืจืคื” ืขื ื•ืงื˜ื•ืจ ื”ืชืงืคืช ืจืฉืช ื•ืฆื™ื•ืŸ ื’ื‘ื•ื” ืœืžื“ื™ (7.5), ื”ืžืื™ื™ื ืขืœ ืžื ื™ืขืช ืฉื™ืจื•ืช (DoS) ืขืงื‘ ืžื™ืฆื•ื™ ืžืฉืื‘ื™ื (CPU). ืชื™ืงื•ืŸ ืœื™ื‘ื” ืขื‘ื•ืจ FragmentSmack ืœื ื”ื•ืฆืข ื‘ืื•ืชื• ื–ืžืŸ; ื™ืชืจ ืขืœ ื›ืŸ, ื”ื•ื ื™ืฆื ื”ืจื‘ื” ื™ื•ืชืจ ืžืื•ื—ืจ ืžืคืจืกื•ื ื”ืžื™ื“ืข ืขืœ ื”ืคื’ื™ืขื•ืช. ื›ื“ื™ ืœื—ืกืœ ืืช SegmentSmack, ื”ื•ืฆืข ืœืขื“ื›ืŸ ืืช ื”ืœื™ื‘ื”. ื—ื‘ื™ืœืช ื”ืขื“ื›ื•ืŸ ืขืฆืžื” ืฉื•ื—ืจืจื” ื‘ืื•ืชื• ื™ื•ื, ื›ืœ ืฉื ื•ืชืจ ื”ื™ื” ืœื”ืชืงื™ืŸ ืื•ืชื”.
ืœื, ืื ื—ื ื• ื‘ื›ืœืœ ืœื ื ื’ื“ ืขื“ื›ื•ืŸ ื”ืงืจื ืœ! ืขื ื–ืืช, ื™ืฉ ื ื™ื•ืื ืกื™ื...

ื›ื™ืฆื“ ืื ื• ืžืขื“ื›ื ื™ื ืืช ื”ืœื™ื‘ื” ื‘ื”ืคืงื”

ื‘ืื•ืคืŸ ื›ืœืœื™, ืฉื•ื ื“ื‘ืจ ืœื ืžืกื•ื‘ืš:

  1. ื”ื•ืจื“ืช ื—ื‘ื™ืœื•ืช;
  2. ื”ืชืงืŸ ืื•ืชื ื‘ืžืกืคืจ ืฉืจืชื™ื (ื›ื•ืœืœ ืฉืจืชื™ื ื”ืžืืจื—ื™ื ืืช ื”ืขื ืŸ ืฉืœื ื•);
  3. ื•ื“ื ืฉืฉื•ื ื“ื‘ืจ ืœื ืฉื‘ื•ืจ;
  4. ื•ื“ื ืฉื›ืœ ื”ื’ื“ืจื•ืช ื”ืœื™ื‘ื” ื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืžื™ื•ืฉืžื•ืช ืœืœื ืฉื’ื™ืื•ืช;
  5. ื”ืžืชืŸ ื›ืžื” ื™ืžื™ื;
  6. ื‘ื“ื•ืง ืืช ื‘ื™ืฆื•ืขื™ ื”ืฉืจืช;
  7. ื”ื—ืœืฃ ืคืจื™ืกื” ืฉืœ ืฉืจืชื™ื ื—ื“ืฉื™ื ืœืงืจื ืœ ื”ื—ื“ืฉ;
  8. ืขื“ื›ืŸ ืืช ื›ืœ ื”ืฉืจืชื™ื ืœืคื™ ืžืจื›ื– ื ืชื•ื ื™ื (ืžืจื›ื– ื ืชื•ื ื™ื ืื—ื“ ื‘ื›ืœ ืคืขื ื›ื“ื™ ืœืžื–ืขืจ ืืช ื”ื”ืฉืคืขื” ืขืœ ื”ืžืฉืชืžืฉื™ื ื‘ืžืงืจื” ืฉืœ ื‘ืขื™ื•ืช);
  9. ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืฉืจืชื™ื.

ื—ื–ื•ืจ ืขืœ ื›ืœ ื”ืขื ืคื™ื ืฉืœ ื”ื’ืจืขื™ื ื™ื ืฉื™ืฉ ืœื ื•. ื›ืจื’ืข ื–ื”:

ื›ืคื™ ืฉืื•ืœื™ ื ื™ื—ืฉืชื, ืืชื—ื•ืœ ืžื—ื“ืฉ ืฉืœ ืืœืคื™ ืฉืจืชื™ื ืœื•ืงื— ืืช ื”ื–ืžืŸ ื”ืืจื•ืš ื‘ื™ื•ืชืจ. ืžื›ื™ื•ื•ืŸ ืฉืœื ื›ืœ ื”ืคื’ื™ืขื•ื™ื•ืช ืงืจื™ื˜ื™ื•ืช ืขื‘ื•ืจ ื›ืœ ื”ืฉืจืชื™ื, ืื ื• ืžืืชื—ืœื™ื ืจืง ืืช ืืœื” ืฉื ื’ื™ืฉื™ื ื™ืฉื™ืจื•ืช ืžื”ืื™ื ื˜ืจื ื˜. ื‘ืขื ืŸ, ื›ื“ื™ ืœื ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ืžื™ืฉื•ืช, ืื ื—ื ื• ืœื ืงื•ืฉืจื™ื ืงื•ื ื˜ื™ื™ื ืจื™ื ื ื’ื™ืฉื™ื ื—ื™ืฆื•ื ื™ืช ืœืฉืจืชื™ื ื‘ื•ื“ื“ื™ื ืขื ืงืจื ืœ ื—ื“ืฉ, ืืœื ืžืืชื—ืœื™ื ืืช ื›ืœ ื”ืžืืจื—ื™ื ืœืœื ื™ื•ืฆื ืžืŸ ื”ื›ืœืœ. ืœืžืจื‘ื” ื”ืžื–ืœ, ื”ื”ืœื™ืš ืฉื ืคืฉื•ื˜ ื™ื•ืชืจ ืžืืฉืจ ื‘ืฉืจืชื™ื ืจื’ื™ืœื™ื. ืœื“ื•ื’ืžื”, ืงื•ื ื˜ื™ื™ื ืจื™ื ื—ืกืจื™ ืžื“ื™ื ื” ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœืขื‘ื•ืจ ืœืฉืจืช ืื—ืจ ื‘ืžื”ืœืš ืืชื—ื•ืœ ืžื—ื“ืฉ.

ืขื ื–ืืช, ื™ืฉ ืขื“ื™ื™ืŸ ื”ืจื‘ื” ืขื‘ื•ื“ื”, ื•ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ื›ืžื” ืฉื‘ื•ืขื•ืช, ื•ืื ื™ืฉ ื‘ืขื™ื•ืช ืขื ื”ื’ืจืกื” ื”ื—ื“ืฉื”, ืขื“ ื›ืžื” ื—ื•ื“ืฉื™ื. ื”ืชื•ืงืคื™ื ืžื‘ื™ื ื™ื ื–ืืช ื”ื™ื˜ื‘, ืื– ื”ื ืฆืจื™ื›ื™ื ืชื•ื›ื ื™ืช ื‘'.

FragmentSmack/SegmentSmack. ื“ืจืš ืœืขืงื™ืคืช ื”ื‘ืขื™ื”

ืœืžืจื‘ื” ื”ืžื–ืœ, ืขื‘ื•ืจ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ืžืกื•ื™ืžื•ืช ืงื™ื™ืžืช ืชื•ื›ื ื™ืช B ื›ื–ื•, ื•ื”ื™ื ื ืงืจืืช Workaround. ืœืจื•ื‘, ื–ื”ื• ืฉื™ื ื•ื™ ื‘ื”ื’ื“ืจื•ืช ืœื™ื‘ื”/ืืคืœื™ืงืฆื™ื” ืฉื™ื›ื•ืœ ืœืžื–ืขืจ ืืช ื”ื”ืฉืคืขื” ื”ืืคืฉืจื™ืช ืื• ืœื‘ื˜ืœ ืœื—ืœื•ื˜ื™ืŸ ืืช ื ื™ืฆื•ืœ ื”ืคื’ื™ืขื•ื™ื•ืช.

ื‘ืžืงืจื” ืฉืœ FragmentSmack/SegmentSmack ื”ื•ืฆืข ื”ืคืชืจื•ืŸ ื”ื–ื”:

ยซืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ืขืจื›ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ 4MB ื•-3MB ื‘-net.ipv4.ipfrag_high_thresh ื•-net.ipv4.ipfrag_low_thresh (ื•ื”ืžืงื‘ื™ืœื™ื ืฉืœื”ื ืขื‘ื•ืจ ipv6 net.ipv6.ipfrag_high_thresh ื•-net.ipv6.ipfrag_low_thresh) ื•-256 kB ื‘ื”ืชืืžื”. ื ืžื•ืš ื™ื•ืชืจ. ื‘ื“ื™ืงื•ืช ืžืจืื•ืช ื™ืจื™ื“ื” ืงื˜ื ื” ืขื“ ืžืฉืžืขื•ืชื™ืช ื‘ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ ื‘ืžื”ืœืš ื”ืชืงืคื” ื‘ื”ืชืื ืœื—ื•ืžืจื”, ืœื”ื’ื“ืจื•ืช ื•ืœืชื ืื™ื. ืขื ื–ืืช, ืขืฉื•ื™ื” ืœื”ื™ื•ืช ื”ืฉืคืขื” ืžืกื•ื™ืžืช ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ืขืงื‘ ipfrag_high_thresh=192 ื‘ืชื™ื, ืžื›ื™ื•ื•ืŸ ืฉืจืง ืฉื ื™ ืžืงื˜ืขื™ื ืฉืœ 262144K ื™ื›ื•ืœื™ื ืœื”ืชืื™ื ืœืชื•ืจ ื”ื”ืจื›ื‘ื” ืžื—ื“ืฉ ื‘ื›ืœ ืคืขื. ืœื“ื•ื’ืžื”, ื™ืฉ ืกื™ื›ื•ืŸ ืฉื™ื™ืฉื•ืžื™ื ืฉืขื•ื‘ื“ื™ื ืขื ืžื ื•ืช UDP ื’ื“ื•ืœื•ืช ื™ื™ืฉื‘ืจื•".

ื”ืคืจืžื˜ืจื™ื ืขืฆืžื ื‘ืชื™ืขื•ื“ ื”ืœื™ื‘ื” ืžืชื•ืืจ ื›ื“ืœืงืžืŸ:

ipfrag_high_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments.

ipfrag_low_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments before the kernel
    begins to remove incomplete fragment queues to free up resources.
    The kernel still accepts new fragments for defragmentation.

ืื™ืŸ ืœื ื• UDPs ื’ื“ื•ืœื™ื ืขืœ ืฉื™ืจื•ืชื™ ื™ื™ืฆื•ืจ. ืื™ืŸ ืชืขื‘ื•ืจื” ืžืงื•ื˜ืขืช ื‘ืจืฉืช ื”-LAN; ื™ืฉ ืชืขื‘ื•ืจื” ืžืงื•ื˜ืขืช ื‘-WAN, ืืš ืœื ืžืฉืžืขื•ืชื™ืช. ืื™ืŸ ืกื™ืžื ื™ื - ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืคืชืจื•ืŸ ืœืขืงื™ืคืช ื”ื‘ืขื™ื”!

FragmentSmack/SegmentSmack. ื“ื ืจืืฉื•ืŸ

ื”ื‘ืขื™ื” ื”ืจืืฉื•ื ื” ืฉื ืชืงืœื ื• ื‘ื” ื”ื™ื ืฉืžื™ื›ืœื™ ืขื ืŸ ื”ืคืขื™ืœื• ืœืคืขืžื™ื ืืช ื”ื”ื’ื“ืจื•ืช ื”ื—ื“ืฉื•ืช ืจืง ื‘ืื•ืคืŸ ื—ืœืงื™ (ืจืง ipfrag_low_thresh), ื•ืœืคืขืžื™ื ืœื ื”ื—ื™ืœื• ืื•ืชืŸ ื‘ื›ืœืœ โ€“ ื”ืŸ ืคืฉื•ื˜ ืงืจืกื• ื‘ื”ืชื—ืœื”. ืœื ื ื™ืชืŸ ื”ื™ื” ืœืฉื—ื–ืจ ืืช ื”ื‘ืขื™ื” ื‘ื™ืฆื™ื‘ื•ืช (ื›ืœ ื”ื”ื’ื“ืจื•ืช ื”ื•ื—ืœื• ื‘ืื•ืคืŸ ื™ื“ื ื™ ืœืœื ืงืฉื™ื™ื). ื”ื”ื‘ื ื” ืžื“ื•ืข ื”ืžื›ื•ืœื” ืงื•ืจืกืช ื‘ื”ืชื—ืœื” ื”ื™ื ื’ื ืœื ื›ืœ ื›ืš ืงืœื”: ืœื ื ืžืฆืื• ืฉื’ื™ืื•ืช. ื“ื‘ืจ ืื—ื“ ื”ื™ื” ื‘ื˜ื•ื—: ื‘ื™ื˜ื•ืœ ื”ื”ื’ื“ืจื•ืช ืœืื—ื•ืจ ืคื•ืชืจ ืืช ื”ื‘ืขื™ื” ืขื ืงืจื™ืกื•ืช ื”ืžื›ื•ืœื”.

ืžื“ื•ืข ืœื ืžืกืคื™ืง ืœื”ื—ื™ืœ Sysctl ืขืœ ื”ืžืืจื—? ื”ืงื•ื ื˜ื™ื™ื ืจ ื—ื™ ื‘ืจืฉืช ื™ื™ืขื•ื“ื™ืช Namespace ืžืฉืœื•, ื›ืš ืœืคื—ื•ืช ื—ืœืง ืžืคืจืžื˜ืจื™ Sysctl ืฉืœ ื”ืจืฉืช ื‘ืžื™ื›ืœ ืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื•ื ื” ืžื”ืžืืจื—.

ืื™ืš ื‘ื“ื™ื•ืง ืžื•ื—ืœื•ืช ื”ื’ื“ืจื•ืช Sysctl ื‘ืงื•ื ื˜ื™ื™ื ืจ? ืžื›ื™ื•ื•ืŸ ืฉื”ืžื›ื•ืœื•ืช ืฉืœื ื• ื”ืŸ ื—ืกืจื•ืช ืคืจื™ื‘ื™ืœื’ื™ื”, ืœื ืชื•ื›ืœ ืœืฉื ื•ืช ืฉื•ื ื”ื’ื“ืจืช Sysctl ืขืœ ื™ื“ื™ ื›ื ื™ืกื” ืœืงื•ื ื˜ื™ื™ื ืจ ืขืฆืžื• - ืคืฉื•ื˜ ืื™ืŸ ืœืš ืžืกืคื™ืง ื–ื›ื•ื™ื•ืช. ื›ื“ื™ ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื, ื”ืขื ืŸ ืฉืœื ื• ื‘ืื•ืชื” ืชืงื•ืคื” ื”ืฉืชืžืฉ ื‘-Docker (ืขื›ืฉื™ื• ืคื•ื“ืžืŸ). ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืงื•ื ื˜ื™ื™ื ืจ ื”ื—ื“ืฉ ื”ื•ืขื‘ืจื• ืœ-Docker ื“ืจืš ื”-API, ื›ื•ืœืœ ื”ื’ื“ืจื•ืช Sysctl ื”ื ื—ื•ืฆื•ืช.
ืชื•ืš ื›ื“ื™ ื—ื™ืคื•ืฉ ื‘ื’ืจืกืื•ืช, ื”ืชื‘ืจืจ ืฉื”-Docker API ืœื ื”ื—ื–ื™ืจ ืืช ื›ืœ ื”ืฉื’ื™ืื•ืช (ืœืคื—ื•ืช ื‘ื’ืจืกื” 1.10). ื›ืฉื ื™ืกื™ื ื• ืœื”ืคืขื™ืœ ืืช ื”ืžื™ื›ืœ ื‘ืืžืฆืขื•ืช "ื“ื•ืงืจ ืจื™ืฆืช", ืกื•ืฃ ืกื•ืฃ ืจืื™ื ื• ืœืคื—ื•ืช ืžืฉื”ื•:

write /proc/sys/net/ipv4/ipfrag_high_thresh: invalid argument docker: Error response from daemon: Cannot start container <...>: [9] System error: could not synchronise with container process.

ืขืจืš ื”ืคืจืžื˜ืจ ืื™ื ื• ื—ื•ืงื™. ืื‘ืœ ืœืžื”? ื•ืœืžื” ื–ื” ืœื ืชืงืฃ ืจืง ืœืคืขืžื™ื? ื”ืชื‘ืจืจ ืฉ-Docker ืœื ืžื‘ื˜ื™ื— ืืช ืกื“ืจ ื”ื—ืœืช ืคืจืžื˜ืจื™ Sysctl (ื”ื’ืจืกื” ื”ืื—ืจื•ื ื” ืฉื ื‘ื“ืงื” ื”ื™ื 1.13.1), ื•ืœื›ืŸ ืœืคืขืžื™ื ื ื™ืกื• ืœื”ื’ื“ื™ืจ ืืช ipfrag_high_thresh ืœ-256K ื›ืืฉืจ ipfrag_low_thresh ืขื“ื™ื™ืŸ ื”ื™ื” 3M, ื›ืœื•ืžืจ, ื”ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ื”ื™ื” ื ืžื•ืš ื™ื•ืชืจ ืžื”ื’ื‘ื•ืœ ื”ืชื—ืชื•ืŸ, ืžื” ืฉื”ื•ื‘ื™ืœ ืœื˜ืขื•ืช.

ื‘ืื•ืชื• ื–ืžืŸ, ื›ื‘ืจ ื”ืฉืชืžืฉื ื• ื‘ืžื ื’ื ื•ืŸ ืžืฉืœื ื• ืœื”ื’ื“ืจื” ืžื—ื“ืฉ ืฉืœ ื”ืžื™ื›ืœ ืœืื—ืจ ื”ื”ืชื—ืœื” (ื”ืงืคืืช ื”ืžื™ื›ืœ ืœืื—ืจ ืžืงืคื™ื ืงื‘ื•ืฆืชื™ ื•ื‘ื™ืฆื•ืข ืคืงื•ื“ื•ืช ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ ื”ืงื•ื ื˜ื™ื™ื ืจ via ip netns), ื•ื’ื ื”ื•ืกืคื ื• ืœื—ืœืง ื”ื–ื” ืคืจืžื˜ืจื™ื ืฉืœ ื›ืชื™ื‘ืช Sysctl. ื”ื‘ืขื™ื” ื ืคืชืจื”.

FragmentSmack/SegmentSmack. ื“ื ืจืืฉื•ืŸ 2

ืœืคื ื™ ืฉื”ืกืคืงื ื• ืœื”ื‘ื™ืŸ ืืช ื”ืฉื™ืžื•ืฉ ื‘- Workaround ื‘ืขื ืŸ, ื”ืชื—ื™ืœื• ืœื”ื’ื™ืข ืชืœื•ื ื•ืช ื ื“ื™ืจื•ืช ืจืืฉื•ื ื•ืช ืฉืœ ืžืฉืชืžืฉื™ื. ื‘ืื•ืชื• ื–ืžืŸ, ืขื‘ืจื• ืžืกืคืจ ืฉื‘ื•ืขื•ืช ืžืื– ืชื—ื™ืœืช ื”ืฉื™ืžื•ืฉ ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ื‘ืฉืจืชื™ื ื”ืจืืฉื•ื ื™ื. ื”ื—ืงื™ืจื” ื”ืจืืฉื•ื ื™ืช ื”ืขืœืชื” ื›ื™ ื”ืชืงื‘ืœื• ืชืœื•ื ื•ืช ื›ื ื’ื“ ืฉื™ืจื•ืชื™ื ื‘ื•ื“ื“ื™ื, ื•ืœื ื›ืœ ื”ืฉืจืชื™ื ืฉืœ ืฉื™ืจื•ืชื™ื ืืœื•. ื”ื‘ืขื™ื” ืฉื•ื‘ ื”ืคื›ื” ืœื ื•ื“ืื™ืช ื‘ื™ื•ืชืจ.

ืงื•ื“ื ื›ืœ, ื›ืžื•ื‘ืŸ, ื ื™ืกื™ื ื• ืœื”ื—ื–ื™ืจ ืืช ื”ื’ื“ืจื•ืช Sysctl ืœืื—ื•ืจ, ืื‘ืœ ื–ื” ืœื ื”ืฉืคื™ืข. ื’ื ืžื ื™ืคื•ืœืฆื™ื•ืช ืฉื•ื ื•ืช ืขื ื”ื’ื“ืจื•ืช ื”ืฉืจืช ื•ื”ืืคืœื™ืงืฆื™ื” ืœื ืขื–ืจื•. ืืชื—ื•ืœ ืžื—ื“ืฉ ืขื–ืจ. ืืชื—ื•ืœ ืœื™ื ื•ืงืก ื”ื•ื ืœื ื˜ื‘ืขื™ ื›ืžื• ืฉื”ื™ื” ืจื’ื™ืœ ืขื‘ื•ืจ Windows ื‘ื™ืžื™ื ืขื‘ืจื•. ืขื ื–ืืช, ื–ื” ืขื–ืจ, ื•ื’ื™ื“ื ื• ืืช ื–ื” ืœ"ืชืงืœืช ืœื™ื‘ื”" ื‘ืขืช ื”ื—ืœืช ื”ื”ื’ื“ืจื•ืช ื”ื—ื“ืฉื•ืช ื‘-Sysctl. ื›ืžื” ืงืœ ื“ืขืช ื–ื” ื”ื™ื”...

ืฉืœื•ืฉื” ืฉื‘ื•ืขื•ืช ืœืื—ืจ ืžื›ืŸ ื”ื‘ืขื™ื” ื—ื–ืจื” ืขืœ ืขืฆืžื”. ื”ืชืฆื•ืจื” ืฉืœ ืฉืจืชื™ื ืืœื• ื”ื™ื™ืชื” ืคืฉื•ื˜ื” ืœืžื“ื™: Nginx ื‘ืžืฆื‘ ืคืจื•ืงืกื™/ืื™ื–ื•ืŸ. ืื™ืŸ ื”ืจื‘ื” ืชื ื•ืขื”. ื”ืขืจืช ื”ื™ื›ืจื•ืช ื—ื“ืฉื”: ืžืกืคืจ 504 ืฉื’ื™ืื•ืช ื‘ืœืงื•ื—ื•ืช ื’ื“ืœ ืžื“ื™ ื™ื•ื (ืคืกืง ื–ืžืŸ ืฉืœ ืฉืขืจ). ื”ื’ืจืฃ ืžืฆื™ื’ ืืช ืžืกืคืจ 504 ื”ืฉื’ื™ืื•ืช ืœื™ื•ื ืขื‘ื•ืจ ืฉื™ืจื•ืช ื–ื”:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื›ืœ ื”ืฉื’ื™ืื•ืช ื”ืŸ ื‘ืขืจืš ืื•ืชื• backend - ืขืœ ื–ื” ืฉื ืžืฆื ื‘ืขื ืŸ. ื’ืจืฃ ืฆืจื™ื›ืช ื”ื–ื™ื›ืจื•ืŸ ืขื‘ื•ืจ ืงื˜ืขื™ ื—ื‘ื™ืœื” ื‘-backend ื–ื” ื ืจืื” ื›ืš:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื–ื”ื• ืื—ื“ ื”ื‘ื™ื˜ื•ื™ื™ื ื”ื‘ืจื•ืจื™ื ื‘ื™ื•ืชืจ ืฉืœ ื”ื‘ืขื™ื” ื‘ื’ืจืคื™ื ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื”. ื‘ืขื ืŸ, ื‘ื“ื™ื•ืง ื‘ืื•ืชื• ื–ืžืŸ, ืชื•ืงื ื” ื‘ืขื™ื™ืช ืจืฉืช ื ื•ืกืคืช ื‘ื”ื’ื“ืจื•ืช QoS (ื‘ืงืจืช ืชื ื•ืขื”). ื‘ื’ืจืฃ ืฉืœ ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ ืขื‘ื•ืจ ืฉื‘ืจื™ ืžื ื•ืช, ื–ื” ื ืจืื” ื‘ื“ื™ื•ืง ืื•ืชื• ื”ื“ื‘ืจ:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื”ื”ื ื—ื” ื”ื™ื™ืชื” ืคืฉื•ื˜ื”: ืื ื”ื ื ืจืื™ื ืื•ืชื• ื”ื“ื‘ืจ ื‘ื’ืจืคื™ื, ืื– ื™ืฉ ืœื”ื ืื•ืชื” ืกื™ื‘ื”. ื™ืชืจ ืขืœ ื›ืŸ, ื›ืœ ื‘ืขื™ื” ื‘ื–ื™ื›ืจื•ืŸ ืžืกื•ื’ ื–ื” ื”ื™ื ื ื“ื™ืจื” ื‘ื™ื•ืชืจ.

ื”ืžื”ื•ืช ืฉืœ ื”ื‘ืขื™ื” ื”ืžืชื•ืงื ืช ื”ื™ื™ืชื” ืฉื”ืฉืชืžืฉื ื• ื‘ืžืชื–ืžืŸ ืžื ื•ืช fq ืขื ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘-QoS. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืขื‘ื•ืจ ื—ื™ื‘ื•ืจ ืื—ื“, ื”ื™ื ืžืืคืฉืจืช ืœื”ื•ืกื™ืฃ 100 ื—ื‘ื™ืœื•ืช ืœืชื•ืจ, ื•ื—ื™ื‘ื•ืจื™ื ืžืกื•ื™ืžื™ื, ื‘ืžืฆื‘ื™ื ืฉืœ ืžื—ืกื•ืจ ื‘ืขืจื•ืฆื™ื, ื”ื—ืœื• ืœืกืชื•ื ืืช ื”ืชื•ืจ ืขื“ ืœืชืคื•ืกื”. ื‘ืžืงืจื” ื–ื”, ืžื ื•ืช ื ืฉืžื˜ื•ืช. ื‘ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช tc (tc -s qdisc) ื ื™ืชืŸ ืœืจืื•ืช ื–ืืช ื›ืš:

qdisc fq 2c6c: parent 1:2c6c limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms
 Sent 454701676345 bytes 491683359 pkt (dropped 464545, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  1024 flows (1021 inactive, 0 throttled)
  0 gc, 0 highprio, 0 throttled, 464545 flows_plimit

"464545 flows_plimit" ื”ื•ื ื”ื—ื‘ื™ืœื•ืช ืฉื”ื•ืจื“ื• ืขืงื‘ ื—ืจื™ื’ื” ืžืžื’ื‘ืœืช ื”ืชื•ืจ ืฉืœ ื—ื™ื‘ื•ืจ ืื—ื“, ื•-"ื ืคืœ 464545" ื”ื•ื ื”ืกื›ื•ื ืฉืœ ื›ืœ ื”ื—ื‘ื™ืœื•ืช ืฉื”ื•ืจื“ื• ืฉืœ ืžืชื–ืžืŸ ื–ื”. ืœืื—ืจ ื”ื’ื“ืœืช ืื•ืจืš ื”ืชื•ืจ ืœืืœืฃ ื•ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ื”ืžื›ื•ืœื•ืช, ื”ื‘ืขื™ื” ื”ืคืกื™ืงื” ืœื”ืชืจื—ืฉ. ืืชื” ื™ื›ื•ืœ ืœืฉื‘ืช ื‘ืฉืงื˜ ื•ืœืฉืชื•ืช ืฉื™ื™ืง.

FragmentSmack/SegmentSmack. ื“ื ืื—ืจื•ืŸ

ืจืืฉื™ืช, ืžืกืคืจ ื—ื•ื“ืฉื™ื ืœืื—ืจ ื”ื”ื›ืจื–ื” ืขืœ ืคืจืฆื•ืช ื‘ืงืจื ืœ, ืกื•ืฃ ืกื•ืฃ ื”ื•ืคื™ืข ืชื™ืงื•ืŸ ืขื‘ื•ืจ FragmentSmack (ืชืŸ ืœื™ ืœื”ื–ื›ื™ืจ ืœืš ืฉื™ื—ื“ ืขื ื”ื”ื›ืจื–ื” ื‘ืื•ื’ื•ืกื˜, ืฉื•ื—ืจืจ ืชื™ืงื•ืŸ ืจืง ืขื‘ื•ืจ SegmentSmack), ืฉื ืชืŸ ืœื ื• ื”ื–ื“ืžื ื•ืช ืœื ื˜ื•ืฉ ืืช Workaround, ืžื” ืฉื’ืจื ืœื ื• ื“ื™ ื”ืจื‘ื” ืฆืจื•ืช. ื‘ืžื”ืœืš ื”ื–ืžืŸ ื”ื–ื”, ื›ื‘ืจ ื”ืกืคืงื ื• ืœื”ืขื‘ื™ืจ ื—ืœืง ืžื”ืฉืจืชื™ื ืœืงืจื ืœ ื”ื—ื“ืฉ, ื•ืขื›ืฉื™ื• ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื”ืชื—ื™ืœ ืžื”ื”ืชื—ืœื”. ืžื“ื•ืข ืขื“ื›ื ื• ืืช ื”ืœื™ื‘ื” ืžื‘ืœื™ ืœื—ื›ื•ืช ืœืชื™ืงื•ืŸ FragmentSmack? ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืชื”ืœื™ืš ื”ื”ื’ื ื” ืžืคื ื™ ื”ืคื’ื™ืขื•ื™ื•ืช ื”ืœืœื• ืขืœื” ื‘ืงื ื” ืื—ื“ (ื•ื”ืชืžื–ื’) ืขื ืชื”ืœื™ืš ืขื“ื›ื•ืŸ CentOS ืขืฆืžื• (ืฉืœื•ืงื— ืืคื™ืœื• ื™ื•ืชืจ ื–ืžืŸ ืžืขื“ื›ื•ืŸ ื”ืงืจื ืœ ื‘ืœื‘ื“). ื‘ื ื•ืกืฃ, SegmentSmack ื”ื™ื ืคื’ื™ืขื•ืช ืžืกื•ื›ื ืช ื™ื•ืชืจ, ื•ืชื™ืงื•ืŸ ืœื” ื”ื•ืคื™ืข ืžื™ื“, ื›ืš ืฉื–ื” ื”ื™ื” ื”ื’ื™ื•ื ื™ ื‘ื›ืœ ืžืงืจื”. ืขื ื–ืืช, ืœื ื™ื›ื•ืœื ื• ืคืฉื•ื˜ ืœืขื“ื›ืŸ ืืช ื”ืœื™ื‘ื” ื‘-CentOS ืžื›ื™ื•ื•ืŸ ืฉืคื’ื™ืขื•ืช FragmentSmack, ืฉื”ื•ืคื™ืขื” ื‘ืžื”ืœืš CentOS 7.5, ืชื•ืงื ื” ืจืง ื‘ื’ืจืกื” 7.6, ืื– ื ืืœืฆื ื• ืœืขืฆื•ืจ ืืช ื”ืขื“ื›ื•ืŸ ืœ-7.5 ื•ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ ืขื ื”ืขื“ื›ื•ืŸ ืœ-7.6. ื•ื’ื ื–ื” ืงื•ืจื”.

ืฉื ื™ืช, ืชืœื•ื ื•ืช ื ื“ื™ืจื•ืช ืฉืœ ืžืฉืชืžืฉื™ื ืขืœ ื‘ืขื™ื•ืช ื—ื–ืจื• ืืœื™ื ื•. ืขื›ืฉื™ื• ืื ื—ื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื ื‘ื•ื•ื“ืื•ืช ืฉื›ื•ืœื ืงืฉื•ืจื™ื ืœื”ืขืœืืช ืงื‘ืฆื™ื ืžืœืงื•ื—ื•ืช ืœื—ืœืง ืžื”ืฉืจืชื™ื ืฉืœื ื•. ื™ืชืจื” ืžื›ืš, ืžืกืคืจ ืงื˜ืŸ ืžืื•ื“ ืฉืœ ื”ืขืœืื•ืช ืžื›ืœืœ ื”ืžืกื” ืขื‘ืจ ื“ืจืš ื”ืฉืจืชื™ื ื”ืœืœื•.

ื›ืคื™ ืฉืื ื• ื–ื•ื›ืจื™ื ืžื”ืกื™ืคื•ืจ ืœืžืขืœื”, ื”ื—ื–ืจืช Sysctl ืœื ืขื–ืจ. ืืชื—ื•ืœ ืžื—ื“ืฉ ืขื–ืจ, ืื‘ืœ ื‘ืื•ืคืŸ ื–ืžื ื™.
ื”ื—ืฉื“ื•ืช ืœื’ื‘ื™ Sysctl ืœื ื”ื•ืกืจื•, ืืš ื”ืคืขื ื”ื™ื” ืฆื•ืจืš ืœืืกื•ืฃ ืžื™ื“ืข ืจื‘ ื›ื›ืœ ื”ืืคืฉืจ. ื”ื™ื” ื’ื ื—ื•ืกืจ ืขืฆื•ื ื‘ื™ื›ื•ืœืช ืœืฉื—ื–ืจ ืืช ื‘ืขื™ื™ืช ื”ื”ืขืœืื” ืขืœ ื”ืœืงื•ื— ื›ื“ื™ ืœืœืžื•ื“ ื‘ืฆื•ืจื” ืžื“ื•ื™ืงืช ื™ื•ืชืจ ืžื” ืงื•ืจื”.

ื ื™ืชื•ื— ื›ืœ ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื•ื”ื™ื•ืžื ื™ื ื”ื–ืžื™ื ื™ื ืœื ืงื™ืจื‘ ืื•ืชื ื• ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื”. ื”ื™ื” ื—ื•ืกืจ ืืงื•ื˜ื™ ื‘ื™ื›ื•ืœืช ืœืฉื—ื–ืจ ืืช ื”ื‘ืขื™ื” ื›ื“ื™ "ืœื”ืจื’ื™ืฉ" ืงืฉืจ ืกืคืฆื™ืคื™. ืœื‘ืกื•ืฃ, ื”ืžืคืชื—ื™ื, ื‘ืืžืฆืขื•ืช ื’ืจืกื” ืžื™ื•ื—ื“ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื”, ื”ืฆืœื™ื—ื• ืœื”ืฉื™ื’ ืฉื—ื–ื•ืจ ื™ืฆื™ื‘ ืฉืœ ื‘ืขื™ื•ืช ื‘ืžื›ืฉื™ืจ ื‘ื“ื™ืงื” ื›ืืฉืจ ื”ื ืžื—ื•ื‘ืจื™ื ื‘ืืžืฆืขื•ืช Wi-Fi. ื–ื• ื”ื™ื™ืชื” ืคืจื™ืฆืช ื“ืจืš ื‘ื—ืงื™ืจื”. ื”ืœืงื•ื— ื”ืชื—ื‘ืจ ืœ-Nginx, ืฉืฉืœื— ืคืจื•ืงืกื™ ืœ-backend, ืฉื”ื™ื” ืืคืœื™ืงืฆื™ื™ืช Java ืฉืœื ื•.

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื”ื“ื™ืืœื•ื’ ืœื‘ืขื™ื•ืช ื”ื™ื” ื›ื–ื” (ืชื•ืงืŸ ื‘ืฆื“ ื”-Proxy ืฉืœ Nginx):

  1. ืœืงื•ื—: ื‘ืงืฉื” ืœืงื‘ืœ ืžื™ื“ืข ืขืœ ื”ื•ืจื“ืช ืงื•ื‘ืฅ.
  2. ืฉืจืช Java: ืชื’ื•ื‘ื”.
  3. ืœืงื•ื—: POST ืขื ืงื•ื‘ืฅ.
  4. ืฉืจืช Java: ืฉื’ื™ืื”.

ื‘ืžืงื‘ื™ืœ, ืฉืจืช ื”-Java ื›ื•ืชื‘ ืœืœื•ื’ ืฉ-0 ื‘ืชื™ื ืฉืœ ื ืชื•ื ื™ื ื”ืชืงื‘ืœื• ืžื”ืœืงื•ื—, ื•ื”ืคืจื•ืงืกื™ ืฉืœ Nginx ื›ื•ืชื‘ ืฉื”ื‘ืงืฉื” ืืจื›ื” ื™ื•ืชืจ ืž-30 ืฉื ื™ื•ืช (30 ืฉื ื™ื•ืช ื”ืŸ ืคืกืง ื”ื–ืžืŸ ืฉืœ ืืคืœื™ืงืฆื™ื™ืช ื”ืœืงื•ื—). ืœืžื” ืคืกืง ื”ื–ืžืŸ ื•ืœืžื” 0 ื‘ืชื™ื? ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ HTTP, ื”ื›ืœ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš, ืื‘ืœ ื ืจืื” ืฉื”-POST ืขื ื”ืงื•ื‘ืฅ ื ืขืœื ืžื”ืจืฉืช. ื™ืชืจ ืขืœ ื›ืŸ, ื”ื•ื ื ืขืœื ื‘ื™ืŸ ื”ืœืงื•ื— ืœ-Nginx. ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืชื—ืžืฉ ื‘-Tcpdump! ืื‘ืœ ืงื•ื“ื ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืืช ืชืฆื•ืจืช ื”ืจืฉืช. ืคืจื•ืงืกื™ Nginx ื ืžืฆื ืžืื—ื•ืจื™ ื”ืžืื–ืŸ L3 NFware. ืžื ื”ื•ืจ ืžืฉืžืฉ ืœื”ืขื‘ืจืช ืžื ื•ืช ืžื”ืžืื–ืŸ L3 ืœืฉืจืช, ืฉืžื•ืกื™ืฃ ืืช ื”ื›ื•ืชืจื•ืช ืฉืœื• ืœื—ื‘ื™ืœื•ืช:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื‘ืžืงืจื” ื–ื”, ื”ืจืฉืช ืžื’ื™ืขื” ืœืฉืจืช ื–ื” ื‘ืฆื•ืจื” ืฉืœ ืชืขื‘ื•ืจื” ืžืชื•ื™ื’ืช Vlan, ืืฉืจ ืžื•ืกื™ืคื” ื’ื ืฉื“ื•ืช ืžืฉืœื” ืœื—ื‘ื™ืœื•ืช:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ื•ืชืขื‘ื•ืจื” ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื’ื ืžืคื•ืฆืœืช (ืื•ืชื• ืื—ื•ื– ืงื˜ืŸ ืฉืœ ืชืขื‘ื•ืจื” ืžืคื•ืฆืœืช ื ื›ื ืกืช ืฉืขืœื™ื” ื“ื™ื‘ืจื ื• ื‘ืขืช ื”ืขืจื›ืช ื”ืกื™ื›ื•ื ื™ื ืžืขืงื™ืคื”), ืžื” ืฉื’ื ืžืฉื ื” ืืช ืชื•ื›ืŸ ื”ื›ื•ืชืจื•ืช:

ื”ื™ื–ื”ืจื• ืžืคื’ื™ืขื•ืช ืฉืžื‘ื™ืื•ืช ืœืกื‘ื‘ื™ ืขื‘ื•ื“ื”. ื—ืœืง 1: FragmentSmack/SegmentSmack

ืฉื•ื‘: ืžื ื•ืช ืžื•ื‘ืœืขื•ืช ื‘ืชื’ื™ืช Vlan, ืžื›ื•ืกื•ืช ื‘ืžื ื”ืจื”, ืžืงื•ื˜ืขื•ืช. ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืื™ืš ื–ื” ืงื•ืจื”, ื‘ื•ืื• ื ืขืงื•ื‘ ืื—ืจ ืžืกืœื•ืœ ื”ื—ื‘ื™ืœื” ืžื”ืœืงื•ื— ืœ-Proxy Nginx.

  1. ื”ื—ื‘ื™ืœื” ืžื’ื™ืขื” ืœืžืื–ืŸ L3. ืœื ื™ืชื•ื‘ ื ื›ื•ืŸ ื‘ืชื•ืš ืžืจื›ื– ื”ื ืชื•ื ื™ื, ื”ื—ื‘ื™ืœื” ืžื›ื•ืกื” ื‘ืžื ื”ืจื” ื•ื ืฉืœื—ืช ืœื›ืจื˜ื™ืก ื”ืจืฉืช.
  2. ืžื›ื™ื•ื•ืŸ ืฉื›ื•ืชืจื•ืช ื”ื—ื‘ื™ืœื•ืช + ื”ืžื ื”ืจื” ืื™ื ืŸ ืžืชืื™ืžื™ื ืœ-MTU, ื”ื—ื‘ื™ืœื” ื ื—ืชื›ืช ืœืคืจื’ืžื ื˜ื™ื ื•ื ืฉืœื—ืช ืœืจืฉืช.
  3. ื”ืžืชื’ ืฉืื—ืจื™ ื”ืื™ื–ื•ืŸ L3, ื‘ืขืช ืงื‘ืœืช ื—ื‘ื™ืœื”, ืžื•ืกื™ืฃ ืœื• ืชื’ Vlan ื•ืฉื•ืœื— ืื•ืชื• ื”ืœืื”.
  4. ื”ืžืชื’ ืฉืœืคื ื™ ื”-Proxy ืฉืœ Nginx ืจื•ืื” (ื‘ื”ืชื‘ืกืก ืขืœ ื”ื’ื“ืจื•ืช ื”ื™ืฆื™ืื”) ืฉื”ืฉืจืช ืžืฆืคื” ืœืžื ื•ืช ืžื•ื‘ืœืขืช ืฉืœ Vlan, ื•ืœื›ืŸ ื”ื•ื ืฉื•ืœื— ืื•ืชื” ื›ืคื™ ืฉื”ื™ื, ืžื‘ืœื™ ืœื”ืกื™ืจ ืืช ืชื’ Vlan.
  5. ืœื™ื ื•ืงืก ืœื•ืงื—ืช ืงื˜ืขื™ื ืฉืœ ื—ื‘ื™ืœื•ืช ื‘ื•ื“ื“ื•ืช ื•ืžืžื–ื’ืช ืื•ืชื ืœื—ื‘ื™ืœื” ืื—ืช ื’ื“ื•ืœื”.
  6. ืœืื—ืจ ืžื›ืŸ, ื”ื—ื‘ื™ืœื” ืžื’ื™ืขื” ืœืžืžืฉืง Vlan, ืฉื ืžื•ืกืจืช ืžืžื ื• ื”ืฉื›ื‘ื” ื”ืจืืฉื•ื ื” - Vlan encapsulation.
  7. ืœืื—ืจ ืžื›ืŸ ืœื™ื ื•ืงืก ืฉื•ืœื—ืช ืื•ืชื• ืœืžืžืฉืง Tunnel, ืฉื ืžื•ืกืจืช ืฉื›ื‘ื” ื ื•ืกืคืช ืžืžื ื• - Tunnel encapsulation.

ื”ืงื•ืฉื™ ื”ื•ื ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื–ื” ื›ืคืจืžื˜ืจื™ื ืœ-tcpdump.
ื ืชื—ื™ืœ ืžื”ืกื•ืฃ: ื”ืื ื™ืฉื ืŸ ื—ื‘ื™ืœื•ืช IP ื ืงื™ื•ืช (ืœืœื ื›ื•ืชืจื•ืช ืžื™ื•ืชืจื•ืช) ืžืœืงื•ื—ื•ืช, ื›ืฉื”-vlan ื•-tunnel encapsulation ื”ื•ืกืจ?

tcpdump host <ip ะบะปะธะตะฝั‚ะฐ>

ืœื, ืœื ื”ื™ื• ื—ื‘ื™ืœื•ืช ื›ืืœื” ื‘ืฉืจืช. ืื– ื”ื‘ืขื™ื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืฉื ืงื•ื“ื. ื”ืื ื™ืฉ ื—ื‘ื™ืœื•ืช ืฉื”ื•ืกืจื” ืจืง ืื ืงืคืกื•ืœืฆื™ื” ืฉืœ Vlan?

tcpdump ip[32:4]=0xx390x2xx

0xx390x2xx ื”ื™ื ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืœืงื•ื— ื‘ืคื•ืจืžื˜ hex.
32:4 - ื›ืชื•ื‘ืช ื•ืื•ืจืš ื”ืฉื“ื” ืฉื‘ื• ื ื›ืชื‘ ื”-SCR IP ื‘ื—ื‘ื™ืœืช ื”ืžื ื”ืจื”.

ื›ืชื•ื‘ืช ื”ืฉื“ื” ื”ื™ื™ืชื” ืฆืจื™ื›ื” ืœื”ื™ื‘ื—ืจ ื‘ื›ื•ื— ื’ืก, ืžื›ื™ื•ื•ืŸ ืฉื‘ืื™ื ื˜ืจื ื˜ ื›ื•ืชื‘ื™ื ื‘ืขืจืš 40, 44, 50, 54, ืื‘ืœ ืœื ื”ื™ื™ืชื” ืฉื ื›ืชื•ื‘ืช IP. ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืกืชื›ืœ ืขืœ ืื—ืช ื”ื—ื‘ื™ืœื•ืช ื‘-hex (ื”ืคืจืžื˜ืจ -xx ืื• -XX ื‘-tcpdump) ื•ืœื—ืฉื‘ ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืืชื” ืžื›ื™ืจ.

ื”ืื ื™ืฉ ืงื˜ืขื™ ืžื ื•ืช ืœืœื ืื ืงืคืกื•ืœืฆื™ื” ืฉืœ Vlan ื•-Tunnel?

tcpdump ((ip[6:2] > 0) and (not ip[6] = 64))

ื”ืงืกื ื”ื–ื” ื™ืจืื” ืœื ื• ืืช ื›ืœ ื”ืฉื‘ืจื™ื, ื›ื•ืœืœ ื”ืื—ืจื•ืŸ. ื›ื ืจืื” ืฉืืคืฉืจ ืœืกื ืŸ ืืช ืื•ืชื• ื”ื“ื‘ืจ ืœืคื™ IP, ืื‘ืœ ืœื ื ื™ืกื™ืชื™, ื›ื™ ืื™ืŸ ื”ืจื‘ื” ืžืื•ื“ ื—ื‘ื™ืœื•ืช ื›ืืœื”, ื•ืืœื” ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ื ืžืฆืื• ื‘ืงืœื•ืช ื‘ื–ืจื™ืžื” ื”ื›ืœืœื™ืช. ื”ื ื” ื”ื:

14:02:58.471063 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 1516: (tos 0x0, ttl 63, id 53652, offset 0, flags [+], proto IPIP (4), length 1500)
    11.11.11.11 > 22.22.22.22: truncated-ip - 20 bytes missing! (tos 0x0, ttl 50, id 57750, offset 0, flags [DF], proto TCP (6), length 1500)
    33.33.33.33.33333 > 44.44.44.44.80: Flags [.], seq 0:1448, ack 1, win 343, options [nop,nop,TS val 11660691 ecr 2998165860], length 1448
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 05dc d194 2000 3f09 d5fb 0a66 387d E.......?....f8}
        0x0020: 1x67 7899 4500 06xx e198 4000 3206 6xx4 [email protected].
        0x0030: b291 x9xx x345 2541 83b9 0050 9740 0x04 .......A...P.@..
        0x0040: 6444 4939 8010 0257 8c3c 0000 0101 080x dDI9...W.......
        0x0050: 00b1 ed93 b2b4 6964 xxd8 ffe1 006a 4578 ......ad.....jEx
        0x0060: 6966 0000 4x4d 002a 0500 0008 0004 0100 if..MM.*........

14:02:58.471103 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 62: (tos 0x0, ttl 63, id 53652, offset 1480, flags [none], proto IPIP (4), length 40)
    11.11.11.11 > 22.22.22.22: ip-proto-4
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 0028 d194 00b9 3f04 faf6 2x76 385x E..(....?....f8}
        0x0020: 1x76 6545 xxxx 1x11 2d2c 0c21 8016 8e43 .faE...D-,.!...C
        0x0030: x978 e91d x9b0 d608 0000 0000 0000 7c31 .x............|Q
        0x0040: 881d c4b6 0000 0000 0000 0000 0000 ..............

ืžื“ื•ื‘ืจ ื‘ืฉื ื™ ืฉื‘ืจื™ื ืฉืœ ื—ื‘ื™ืœื” ืื—ืช (ืื•ืชื• ืชืขื•ื“ืช ื–ื”ื•ืช 53652) ืขื ืฆื™ืœื•ื (ื”ืžื™ืœื” Exif ื’ืœื•ื™ื” ื‘ื—ื‘ื™ืœื” ื”ืจืืฉื•ื ื”). ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื™ืฉ ื—ื‘ื™ืœื•ืช ื‘ืจืžื” ื–ื•, ืืš ืœื ื‘ืฆื•ืจื” ื”ืžืžื•ื–ื’ืช ื‘ืžื–ื‘ืœื•ืช, ื”ื‘ืขื™ื” ื”ื™ื ื‘ื‘ื™ืจื•ืจ ื‘ื”ืจื›ื‘ื”. ืกื•ืฃ ืกื•ืฃ ื™ืฉ ื”ื•ื›ื—ื•ืช ืชื™ืขื•ื“ื™ื•ืช ืœื›ืš!

ืžืคืขื ื— ื”ื—ื‘ื™ืœื•ืช ืœื ื—ืฉืฃ ื‘ืขื™ื•ืช ืฉื™ืžื ืขื• ืืช ื”ื‘ื ื™ื™ื”. ื ื™ืกื™ืชื™ ืืช ื–ื” ื›ืืŸ: hpd.gasmi.net. ื‘ื”ืชื—ืœื”, ื›ืฉืืชื” ืžื ืกื” ืœืžืœื ืฉื ืžืฉื”ื•, ื”ืžืคืขื ื— ืœื ืื•ื”ื‘ ืืช ืคื•ืจืžื˜ ื”ื—ื‘ื™ืœื•ืช. ื”ืชื‘ืจืจ ืฉื”ื™ื• ื›ืžื” ืฉื ื™ ืื•ืงื˜ื˜ื™ื ื ื•ืกืคื™ื ื‘ื™ืŸ Srcmac ืœื‘ื™ืŸ Ethertype (ืœื ืงืฉื•ืจ ืœืคืจื’ืžื ื˜ ืžื™ื“ืข). ืœืื—ืจ ื”ืกืจืชื, ื”ืžืคืขื ื— ื”ืชื—ื™ืœ ืœืขื‘ื•ื“. ืขื ื–ืืช, ื–ื” ืœื ื”ืจืื” ื‘ืขื™ื•ืช.
ืœื ืžืฉื ื” ืžื” ื™ื’ื™ื“ื•, ืฉื•ื ื“ื‘ืจ ืื—ืจ ืœื ื ืžืฆื ืžืœื‘ื“ ืื•ืชื Sysctl. ื›ืœ ืฉื ื•ืชืจ ื”ื™ื” ืœืžืฆื•ื ื“ืจืš ืœื–ื”ื•ืช ืฉืจืชื™ื ื‘ืขื™ื™ืชื™ื™ื ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืงื ื” ื”ืžื™ื“ื” ื•ืœื”ื—ืœื™ื˜ ืขืœ ืคืขื•ืœื•ืช ื ื•ืกืคื•ืช. ื”ืžื•ื ื” ื”ื ื“ืจืฉ ื ืžืฆื ื‘ืžื”ื™ืจื•ืช ืžืกืคืงืช:

netstat -s | grep "packet reassembles failedโ€

ื–ื” ื’ื ื‘-snmpd ืชื—ืช OID=1.3.6.1.2.1.4.31.1.1.16.1 (ipSystemStatsReasmFails).

"ืžืกืคืจ ื”ืชืงืœื•ืช ืฉื–ื•ื”ื• ืขืœ ื™ื“ื™ ืืœื’ื•ืจื™ืชื ื”ื”ืจื›ื‘ื” ืžื—ื“ืฉ ืฉืœ ื”-IP (ืžื›ืœ ืกื™ื‘ื” ืฉื”ื™ื: ืงืฆื•ื‘ ื”ื–ืžืŸ ื”ืงืฆื•ื‘, ืฉื’ื™ืื•ืช ื•ื›ื•')."

ื‘ื™ืŸ ืงื‘ื•ืฆืช ื”ืฉืจืชื™ื ืฉื‘ื”ื ื ื—ืงืจื” ื”ื‘ืขื™ื”, ื‘ืฉื ื™ื™ื ื”ืžื•ื ื” ื”ื–ื” ืขืœื” ืžื”ืจ ื™ื•ืชืจ, ื‘ืฉื ื™ื™ื ื™ื•ืชืจ ืœืื˜, ื•ื‘ืฉื ื™ื™ื ื ื•ืกืคื™ื ื”ื•ื ืœื ื’ื“ืœ ื›ืœืœ. ื”ืฉื•ื•ืืช ื”ื“ื™ื ืžื™ืงื” ืฉืœ ืžื•ื ื” ื–ื” ืขื ื”ื“ื™ื ืžื™ืงื” ืฉืœ ืฉื’ื™ืื•ืช HTTP ื‘ืฉืจืช Java ื’ื™ืœืชื” ืžืชืื. ื›ืœื•ืžืจ, ื ื™ืชืŸ ื”ื™ื” ืœื ื˜ืจ ืืช ื”ืžื•ื ื”.

ื—ืฉื•ื‘ ืžืื•ื“ ืฉื™ื”ื™ื” ืื™ื ื“ื™ืงื˜ื•ืจ ืืžื™ืŸ ืœื‘ืขื™ื•ืช ื›ื“ื™ ืฉืชื•ื›ืœื• ืœืงื‘ื•ืข ื‘ืžื“ื•ื™ืง ื”ืื ื”ื—ื–ืจืช Sysctl ืœืื—ื•ืจ ืขื•ื–ืจืช, ืฉื›ืŸ ืžื”ืกื™ืคื•ืจ ื”ืงื•ื“ื ืื ื• ื™ื•ื“ืขื™ื ืฉืœื ื ื™ืชืŸ ืœื”ื‘ื™ืŸ ื–ืืช ืžื™ื“ ืžื”ืืคืœื™ืงืฆื™ื”. ืžื—ื•ื•ืŸ ื–ื” ื™ืืคืฉืจ ืœื ื• ืœื–ื”ื•ืช ืืช ื›ืœ ื”ืื–ื•ืจื™ื ื”ื‘ืขื™ื™ืชื™ื™ื ื‘ื™ื™ืฆื•ืจ ืœืคื ื™ ืฉืžืฉืชืžืฉื™ื ืžื’ืœื™ื ืื•ืชื•.
ืœืื—ืจ ื”ื—ื–ืจืช Sysctl ืœืื—ื•ืจ ื ืขืฆืจื• ืฉื’ื™ืื•ืช ื”ื ื™ื˜ื•ืจ, ื•ื‘ื›ืš ื”ื•ื›ื—ื” ืกื™ื‘ืช ื”ื‘ืขื™ื•ืช, ื›ืžื• ื’ื ื”ืขื•ื‘ื“ื” ืฉื”ื—ื–ืจื” ืขื•ื–ืจืช.

ื”ื—ื–ืจื ื• ืœืื—ื•ืจ ืืช ื”ื’ื“ืจื•ืช ื”ืคืจื’ืžื ื˜ืฆื™ื” ื‘ืฉืจืชื™ื ืื—ืจื™ื, ืฉื‘ื”ื ื ื™ื˜ื•ืจ ื—ื“ืฉ ื ื›ื ืก ืœืคืขื•ืœื”, ื•ืื™ืคืฉื”ื• ื”ืงืฆื ื• ืืคื™ืœื• ื™ื•ืชืจ ื–ื™ื›ืจื•ืŸ ืœืคืจื’ืžื ื˜ื™ื ืžืžื” ืฉื”ื™ื” ื‘ืขื‘ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ (ื–ื• ื”ื™ื™ืชื” ืกื˜ื˜ื™ืกื˜ื™ืงืช UDP, ืฉื”ืื•ื‘ื“ืŸ ื”ื—ืœืงื™ ืฉืœื” ืœื ื”ื™ื” ืžื•ืจื’ืฉ ืขืœ ื”ืจืงืข ื”ื›ืœืœื™) .

ื”ืฉืืœื•ืช ื”ื›ื™ ื—ืฉื•ื‘ื•ืช

ืžื“ื•ืข ืžื ื•ืช ืžืคื•ืฆืœื•ืช ื‘ืžืื–ืŸ L3 ืฉืœื ื•? ืจื•ื‘ ื”ื—ื‘ื™ืœื•ืช ืฉืžื’ื™ืขื•ืช ืžื”ืžืฉืชืžืฉื™ื ืœืžืื–ื ื™ื ื”ืŸ SYN ื•-ACK. ื”ื’ื“ืœื™ื ืฉืœ ื”ื—ื‘ื™ืœื•ืช ื”ืœืœื• ืงื˜ื ื•ืช. ืื‘ืœ ืžื›ื™ื•ื•ืŸ ืฉื—ืœืงืŸ ืฉืœ ืžื ื•ืช ื›ืืœื” ื’ื“ื•ืœ ืžืื•ื“, ืขืœ ื”ืจืงืข ืฉืœื”ืŸ ืœื ื”ื‘ื—ื ื• ื‘ื ื•ื›ื—ื•ืชืŸ ืฉืœ ืžื ื•ืช ื’ื“ื•ืœื•ืช ืฉื”ื—ืœื• ืœื”ืชืคืฆืœ.

ื”ืกื™ื‘ื” ื”ื™ื™ืชื” ืกืงืจื™ืคื˜ ืชืฆื•ืจื” ืฉื‘ื•ืจ advmss ื‘ืฉืจืชื™ื ืขื ืžืžืฉืงื™ Vlan (ื”ื™ื• ืžืขื˜ ืžืื•ื“ ืฉืจืชื™ื ืขื ืชืขื‘ื•ืจื” ืžืชื•ื™ื’ืช ื‘ื™ื™ืฆื•ืจ ื‘ืื•ืชื” ืชืงื•ืคื”). Advmss ืžืืคืฉืจืช ืœื ื• ืœื”ืขื‘ื™ืจ ืœืœืงื•ื— ืืช ื”ืžื™ื“ืข ืฉื”ืžื ื•ืช ืœื›ื™ื•ื•ื ื ื• ืฆืจื™ื›ื•ืช ืœื”ื™ื•ืช ืงื˜ื ื•ืช ื™ื•ืชืจ ื‘ื’ื•ื“ืœืŸ ื›ืš ืฉืœืื—ืจ ื”ืฆืžื“ืช ื›ื•ืชืจื•ืช ื”ืžื ื”ืจื•ืช ืืœื™ื”ืŸ ื”ืŸ ืœื ื™ืฆื˜ืจื›ื• ืœื”ื™ื•ืช ืžืคื•ืฆืœื•ืช.

ืžื“ื•ืข ื”ื—ื–ืจื” ืœืื—ื•ืจ ืฉืœ Sysctl ืœื ืขื–ืจ, ืื‘ืœ ืืชื—ื•ืœ ืžื—ื“ืฉ ื›ืŸ? ื‘ื™ื˜ื•ืœ Sysctl ืฉื™ื ื” ืืช ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ื–ืžื™ื ื” ืœืžื™ื–ื•ื’ ื—ื‘ื™ืœื•ืช. ื™ื—ื“ ืขื ื–ืืช, ื›ื›ืœ ื”ื ืจืื” ืขืฆื ื”ืฆืคืช ื”ื–ื™ื›ืจื•ืŸ ืœืคืจื’ืžื ื˜ื™ื ื”ื•ื‘ื™ืœื” ืœื”ืื˜ื” ืฉืœ โ€‹โ€‹ื”ื—ื™ื‘ื•ืจื™ื, ืžื” ืฉื”ื•ื‘ื™ืœ ืœืขื™ื›ื•ื‘ ืฉืœ ืคืจื’ืžื ื˜ื™ื ืœืื•ืจืš ื–ืžืŸ ื‘ืชื•ืจ. ื›ืœื•ืžืจ, ื”ืชื”ืœื™ืš ืขื‘ืจ ื‘ืžื—ื–ื•ืจื™ื•ืช.
ื”ืืชื—ื•ืœ ื ื™ืงื” ืืช ื”ื–ื™ื›ืจื•ืŸ ื•ื”ื›ืœ ื—ื–ืจ ืœืกื“ืจ.

ื”ืื ื ื™ืชืŸ ื”ื™ื” ืœื”ืกืชื“ืจ ืœืœื ืขืงื™ืคืช ื”ื‘ืขื™ื”? ื›ืŸ, ืื‘ืœ ื™ืฉ ืกื™ื›ื•ืŸ ื’ื‘ื•ื” ืœื”ืฉืื™ืจ ืžืฉืชืžืฉื™ื ืœืœื ืฉื™ืจื•ืช ื‘ืžืงืจื” ืฉืœ ื”ืชืงืคื”. ื›ืžื•ื‘ืŸ ืฉื”ืฉื™ืžื•ืฉ ื‘- Workaround ื’ืจื ืœื‘ืขื™ื•ืช ืฉื•ื ื•ืช, ื›ื•ืœืœ ื”ืื˜ื” ืฉืœ โ€‹โ€‹ืื—ื“ ื”ืฉื™ืจื•ืชื™ื ืœืžืฉืชืžืฉื™ื, ืืš ืœืžืจื•ืช ื–ืืช ืื ื• ืกื‘ื•ืจื™ื ืฉื”ืคืขื•ืœื•ืช ื”ื™ื• ืžื•ืฆื“ืงื•ืช.

ืชื•ื“ื” ืจื‘ื” ืœืื ื“ืจื™ื™ ื˜ื™ืžื•ืคื™ื™ื‘ (ืื˜ื™ืžื•ืคื™ื™ื™ื‘) ืœืกื™ื•ืข ื‘ื ื™ื”ื•ืœ ื”ื—ืงื™ืจื”, ื•ื›ืŸ ืืœื›ืกื™ื™ ืงืจื ื‘ (devicex) - ืœืขื‘ื•ื“ื” ื”ื˜ื™ื˜ืื ื™ืช ืฉืœ ืขื“ื›ื•ืŸ Centos ื•ืงืจื ืœื™ื ื‘ืฉืจืชื™ื. ืชื”ืœื™ืš ืฉื‘ืžืงืจื” ื–ื” ื”ื™ื” ืฆืจื™ืš ืœื”ืชื—ื™ืœ ืžื”ื”ืชื—ืœื” ืžืกืคืจ ืคืขืžื™ื, ื•ืœื›ืŸ ื”ื•ื ื ืžืฉืš ื—ื•ื“ืฉื™ื ืืจื•ื›ื™ื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”