-JOVYίϯςφ֓ཁ ܰྔίϯςφ࣮ w KBJMJOH IUUQTHJUIVCDPNLB[VIPKBJMJOH w ESPPU IUUQTHJUIVCDPNZVVLJESPPU w NJODT IUUQTHJUIVCDPNNIJSBNBUNJODT w 'JSFKBJM IUUQTpSFKBJMXPSEQSFTTDPN w QqBTL IUUQTHJUIVCDPNHIFEPQqBTL
ίϯςφΤϯδϯΛͭ͘Ζ͏Ϧιʔεͷ /BNFTQBDFͱ w ϚϯτϙΠϯτɺ1*%ͳͲͷϦιʔεΛ͠ɺϓϩηε ʹରͯ͠ઐ༻ͷάϩʔόϧϦιʔεΛ͍࣋ͬͯΔ͔ͷΑ͏ʹ ݟͤΔ w ͯ͢ͷϓϩηε͍ͣΕ͔ͷωʔϜεϖʔεʹଐ͍ͯ͠Δ w ωʔϜεϖʔεΛ͠ͳ͍߹ϓϩηεͷωʔϜεϖʔ εΛҾ͖ܧ͙ʢfork
$P8ʣ w /proc//ns/Ͱ֬ೝͰ͖Δ
ίϯςφΤϯδϯΛͭ͘Ζ͏Ϧιʔεͷ੍ޚ DHSPVQϑΝΠϧγεςϜ w cgroupfsΛϚϯτ͠ɺσΟϨΫτϦʹΑΔ֊ߏͰάϧʔ ϓΛදݱ w cpu, memoryͳͲ୯ҰͷϦιʔεΛαϒγεςϜͱݺͿ w ҟͳΔෳͷ֊Λ࣋ͭ͜ͱ͕Մೳ ʢcpu, memoryͳͲͷαϒγεςϜ͝ͱʣ w ෳͷαϒγεςϜΛΈ߹Θͤͨ֊ߏ࡞Մೳ ʢcpu+memoryͳͲʣ w Ұൠతʹ/sys/fs/cgroup/ҎԼʹϚϯτ
ίϯςφΤϯδϯΛͭ͘Ζ͏Ϧιʔεͷ੍ޚ ZBQ$ͷDHSPVQ࣮ w cgcreatecgsetcgdeleteͰDHSPVQΛૢ࡞ IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD-- IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD-- w ࢠϓϩηεͱͯ͠ىಈ͢ΔίϯςφͷϦιʔεΛ੍ޚ͢ΔͨΊʹɺ unshareͰࣗͷεΫϦϓτʢ$0ʣΛݺͼग़ͯ͠1*%νΣοΫ ʢ1*%/BNFTQBDFGPSLͳͷͰɺίϯςφͰͷ1*%ͱͳΔʣ IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD-- w trapͰϓϩηεऴྃ࣌ʹ࡞ͨ͠άϧʔϓΛআ IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD- IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD
ίϯςφΤϯδϯΛͭ͘Ζ͏ݖݶͷ੍ݶ ZBQ$ͷ$BQBCJMJUZ࣮ w capsh(8)ͰέʔύϏϦςΟΛૢ࡞ IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD-- w σϑΥϧτͷέʔύϏϦςΟηοτ%PDLFSΛ ࢀߟʢͨͩ͠CAP_NET_RAWআ͘ʣ IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD- IUUQTHJUIVCDPNIBZBKPZBQ$CMPCZBQDPKJNJEZBQD
ίϯςφΤϯδϯΛͭ͘Ζ͏SPPUϑΝΠϧγεςϜͷมߋ DISPPUQJWPU@SPPUͱ DISPPU w ϓϩηεͷϧʔτσΟϨΫτϦΛมߋ͢Δ w ύε໊ղܾ࣌ͷϧʔτσΟϨΫτϦ͕มߋ͞ΕΔ QJWPU@SPPU w ϓϩηεͷSPPUϑΝΠϧγεςϜΛೖΕସ͑Δ w ݩͷSPPUϑΝΠϧγεςϜΛΞϯϚϯτͰ͖Δ
ίϯςφΤϯδϯΛͭ͘Ζ͏SPPUϑΝΠϧγεςϜͷมߋ QJWPU@SPPUͷ݅ w σΟϨΫτϦͰͳ͚ΕͳΒͳ͍ w new_rootͱput_oldݱࡏͷSPPUͱಉ͡ϑΝΠϧγεςϜʹ͋ͬ ͯͳΒͳ͍ w put_oldnew_rootҎԼʹͳ͚ΕͳΒͳ͍ w ଞͷϑΝΠϧγεςϜ͕put_oldʹϚϯτ͞Ε͍ͯͯͳΒͳ͍ QJWPU@SPPͰࢦఆ͢Δ৽͍͠ϑΝΠϧγεςϜͱʢnew_rootʣͱݩ ͷϑΝΠϧγεςϜͷҠಈઌʢput_oldʣҎԼͷ੍ݶ͕͋Δ
ίϯςφΤϯδϯΛͭ͘Ζ͏SPPUϑΝΠϧγεςϜͷมߋ PWFSMBZGTͷMPXFS
VQQFS
XPSL MPXFS w ԼͷσΟϨΫτϦɻಡΈऔΓઐ༻ w ϑΝΠϧγεςϜͷϕʔεͱͳΔσΟϨΫτϦ VQQFS w ্ͷσΟϨΫτϦɻॻ͖ࠐΈՄೳ w ৽ن࡞ɺߋ৽͞ΕͨϑΝΠϧ͜͜ʹॻ͖ग़͞ΕΔ XPSL w ࡞ۀ༻σΟϨΫτϦ w VQQFSͱಉ͡ϑΝΠϧγεςϜʹଘࡏ͢Δඞཁ͕͋Δ
ίϯςφΤϯδϯΛͭ͘Ζ͏SPPUϑΝΠϧγεςϜͷมߋ PWFSMBZGTͷૢ࡞ w NPVOU
NPVOU
$ CLONE_DIR=$(mktemp -d) $ for d in upper work root; do mkdir $CLONE_DIR/$d; done $ sudo mount \ -t overlay \ -o lowerdir=/,upperdir=$CLONE_DIR/upper,workdir=$CLONE_DIR/work \ overlayfs \ $CLONE_DIR/root
ίϯςφΤϯδϯΛͭ͘Ζ͏"QQFOEJYωοτϫʔΫͷ /FUXPSL/BNFTQBDFͷૢ࡞ w JQOFUOT
• ip netns [list] ωοτϫʔΫωʔϜεϖʔεΛҰཡදࣔ • ip netns add ωοτϫʔΫωʔϜεϖʔεͷ࡞ • ip netns del ωοτϫʔΫωʔϜεϖʔεͷআ • ip netns exec ωοτϫʔΫωʔϜεϖʔεΛࢦఆͯ͠ίϚϯυ࣮ޮ w BOENPSF
ίϯςφΤϯδϯΛͭ͘Ζ͏"QQFOEJYωοτϫʔΫͷ ZBQ$ͷ /FUXPSL/BNFTQBDFͱWFUIσϞʢ̎ʣ $ sudo ip link add name yapc0 type bridge $ sudo ip link set dev yapc0 up $ sudo ip a add 10.0.0.1/24 \ broadcast 10.0.0.255 \ label yapc0 \ dev yapc0 ϒϦοδΛ࡞͢Δ
ίϯςφΤϯδϯΛͭ͘Ζ͏"QQFOEJYωοτϫʔΫͷ ZBQ$ͷ /FUXPSL/BNFTQBDFͱWFUIσϞʢ̏ʣ $ ip link # σόΠε໊Λ֬ೝ $ sudo ip link set dev vethXXXXXXX up $ sudo ip link set dev vethXXXXXXX master yapc0 CONT# ip link # eth0ͷଘࡏΛ֬ೝ CONT# ip link set dev eth0 up CONT# ip a add 10.0.0.10/24 dev eth0 ϗετଆͷWFUIΛϒϦοδʹొ͢Δ ίϯςφଆͷvethʹ*1ΞυϨεΛׂΓΔ