LXD ಕಂಟೇನರ್ /dev/net/tun ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲವೇ? unix-char ನಮೂದನ್ನು ಪರಿಶೀಲಿಸಿ
VPN ಕ್ಲೈಂಟ್ ಬಳಸುವ ಮೊದಲು LXD ಹೋಸ್ಟ್ನ TUN ಸಾಧನವನ್ನು ಕಂಟೇನರ್ಗೆ ರವಾನಿಸಬೇಕು. unix-char ಏನು ಸೇರಿಸುತ್ತದೆ, ಏನು ಸೇರಿಸುವುದಿಲ್ಲ ಮತ್ತು ಅದನ್ನು ಹೇಗೆ ಪರಿಶೀಲಿಸುವುದು ಎಂಬುದನ್ನು ನೋಡಿ.
LXD ಹೋಸ್ಟ್ನ ಅಕ್ಷರ ಸಾಧನವನ್ನು ಸಾಧನ ನೋಡ್ ಸೇರಿಸುವ ಮೂಲಕ ಕಂಟೇನರ್ಗೆ ಒದಗಿಸುತ್ತದೆ, ಅತಿಥಿಗೆ ಅದನ್ನು ರಚಿಸಲು ಕಲಿಸುವ ಮೂಲಕ ಅಲ್ಲ. ಕಂಟೇನರ್ನಲ್ಲಿ /dev/net/tun ಇಲ್ಲದಿದ್ದರೆ, ಸಾಧನವು ಹೋಸ್ಟ್ನಲ್ಲಿ ಇರಬಹುದು ಮತ್ತು ಅತಿಥಿ ಅದನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗದೇ ಇರಬಹುದು. unix-char ನಮೂದು ಆ ಮಾರ್ಗದ ನಿರ್ವಾಹಕ-ಬದಿಯ ಅರ್ಧ ಭಾಗವಾಗಿದೆ, ಮತ್ತು ಇದು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ವಿಶೇಷಾಧಿಕಾರ ಕಂಟೇನರ್ಗಿಂತ ಸಂಕುಚಿತವಾಗಿದೆ. ಆದ್ದರಿಂದ ಹೋಸ್ಟ್ ನೋಡ್ ಮತ್ತು ಕಂಟೇನರ್ ನೋಡ್ ಪ್ರತ್ಯೇಕ ಪರಿಶೀಲನೆಗಳಿಗೆ ಅರ್ಹವಾಗಿವೆ.
ಕಾರ್ಯವಿಧಾನವು ನೋಟದಲ್ಲಿಡಲು ಸಾಕಷ್ಟು ಚಿಕ್ಕದಾಗಿದೆ: LXD ಹೋಸ್ಟ್ ಮಾರ್ಗವನ್ನು ಪರಿಹರಿಸುತ್ತದೆ, ಇನ್ಸ್ಟೆನ್ಸ್ ಒಳಗೆ ಹೊಂದುವ ನೋಡ್ ರಚಿಸುತ್ತದೆ ಮತ್ತು ಸಾಧನವನ್ನು ಕಂಟೇನರ್ನ ಸಾಧನ cgroup ಗೆ ಸೇರಿಸುತ್ತದೆ. ನಂತರ ಅತಿಥಿ ಪ್ರಕ್ರಿಯೆಗೆ ನೋಡ್ ಅನ್ನು ಯಾವುದಕ್ಕಾದರೂ ಬಳಸಲು ತನ್ನದೇ ಅನುಮತಿ ಮತ್ತು ಸಾಮರ್ಥ್ಯ ಬೇಕು.
unix-char ನಮೂದು ವಾಸ್ತವವಾಗಿ ಏನನ್ನು ಬದಲಿಸುತ್ತದೆ
unix-char ಸಾಧನವು LXD ಗೆ ಹೋಸ್ಟ್ನ ಒಂದು ಅಕ್ಷರ ಸಾಧನವನ್ನು ಕಂಟೇನರ್ ಒಳಗಿನ ಆಯ್ದ ಮಾರ್ಗದಲ್ಲಿ ಒದಗಿಸುವಂತೆ ಹೇಳುತ್ತದೆ. ನಮೂದಿನಲ್ಲಿ ಮೂರು ಮುಖ್ಯ ಭಾಗಗಳಿವೆ: ನಿರ್ವಾಹಕ ಬಳಸುವ ಸಾಧನ ಲೇಬಲ್, ಹೋಸ್ಟ್ನಲ್ಲಿ source ಮಾರ್ಗ ಮತ್ತು ಅತಿಥಿ ನೋಡುವ path. ಕೊನೆಯ ಎರಡು ಮಾತ್ರ ಸಾಧನವನ್ನೇ ವಿವರಿಸುತ್ತವೆ. ಅವುಗಳಲ್ಲಿ ಒಂದರಲ್ಲಿ ಟೈಪಿಂಗ್ ತಪ್ಪಾದರೆ ಕ್ಲೈಂಟ್ ಎಂದೂ ತೆರೆಯದ ಸ್ಥಳದಲ್ಲಿ ನೋಡ್ ಉಂಟಾಗುತ್ತದೆ.
ಹೋಸ್ಟ್ನಲ್ಲಿ ಸಾಧನ ಸಾಮಾನ್ಯವಾಗಿ /dev/net/tun ಆಗಿರುತ್ತದೆ. ಕಂಟೇನರ್ ಒಳಗೆ ನೀವು ಅದೇ ಮಾರ್ಗವನ್ನು ಇಟ್ಟುಕೊಳ್ಳಬಹುದು ಅಥವಾ ಬೇರೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು, ಆದರೆ ಮಾರ್ಗವು VPN ಕ್ಲೈಂಟ್ ನಿರೀಕ್ಷಿಸುವುದಕ್ಕೆ ಹೊಂದಬೇಕು. /dev/net/tun ಇಟ್ಟುಕೊಳ್ಳುವುದು ಎರಡನೇ ಸಂರಚನಾ ಸಮಸ್ಯೆಯನ್ನು ತಪ್ಪಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಬಹುತೇಕ ಕ್ಲೈಂಟ್ಗಳು ಆ ಮಾರ್ಗವನ್ನು ಕೇಳದೆ ತೆರೆಯುತ್ತವೆ.
ಇನ್ಸ್ಟೆನ್ಸ್ ಆರಂಭವಾದಾಗ ಅಥವಾ ಸಾಧನ ಹಾಟ್ಪ್ಲಗ್ ಆದಾಗ ನಿರ್ವಾಹಕ ನಮೂದನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ. ಅದು ಅತಿಥಿಗೆ ಯಾವುದೇ ಡ್ರೈವರ್ ನಕಲಿಸುವುದಿಲ್ಲ ಮತ್ತು ಟನೆಲ್ ಇಂಟರ್ಫೇಸ್ ರಚಿಸುವುದಿಲ್ಲ. ಅದು ನೋಡ್ ಅನ್ನು ಗೋಚರವಾಗಿಸುತ್ತದೆ ಮತ್ತು ಕಂಟೇನರ್ನ ಸಾಧನ ನಿಯಂತ್ರಣ ಗುಂಪಿನ ಮೂಲಕ ಪ್ರವೇಶಕ್ಕೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ.
ಸಾಧನವನ್ನು ಅತಿಥಿಯ ಒಳಗಲ್ಲ, ಇನ್ಸ್ಟೆನ್ಸ್ನಲ್ಲಿ ಘೋಷಿಸಿ
LXD ಆಡಳಿತ ಸಂದರ್ಭದಿಂದ ನಮೂದನ್ನು ಸೇರಿಸಿ, ಇನ್ಸ್ಟೆನ್ಸ್ ಮತ್ತು ನಂತರ ಗುರುತಿಸಬಹುದಾದ ಲೇಬಲ್ ಹೆಸರಿಸಿ. vpnbox ಎಂಬ ಕಂಟೇನರ್ಗೆ ಆದೇಶ ಇದು:
lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox
ಲೇಬಲ್ tun ಇನ್ಸ್ಟೆನ್ಸ್ ಸಂರಚನೆಗೆ ಸ್ಥಳೀಯವಾಗಿದೆ. ಅದು ಇಂಟರ್ಫೇಸ್ ಹೆಸರಲ್ಲ ಮತ್ತು ಅತಿಥಿಯಲ್ಲಿ ಯಾವುದಕ್ಕೂ ಹೊಂದಬೇಕಿಲ್ಲ. ಪ್ರೊಫೈಲ್ ಈಗಾಗಲೇ ಅದೇ ಸಾಧನವನ್ನು ಒದಗಿಸಿದರೆ, ಎರಡನೇ ನಮೂದು ಪುನರುಕ್ತಿಯಲ್ಲ, ಘರ್ಷಣೆ ಉಂಟುಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಮೊದಲು ಪರಿಣಾಮಕಾರಿ ಸಂರಚನೆಯನ್ನು ಪರಿಶೀಲಿಸಿ.
ಕಂಟೇನರ್ ಒಳಗಿನ ಕಡತಗಳನ್ನು ಸಂಪಾದಿಸುವುದು ತಪ್ಪು ಪದರ. ಆರಂಭ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿನ mknod ವಿಶೇಷಾಧಿಕಾರ ಕಂಟೇನರ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತಿರುವಂತೆ ಕಾಣಬಹುದು, ನಂತರ ಮರುಸೃಷ್ಟಿಯಲ್ಲಿ ಮಾಯವಾಗಬಹುದು ಅಥವಾ ಕಡಿಮೆ ವಿಶೇಷಾಧಿಕಾರದ್ದರಲ್ಲಿ ವಿಫಲವಾಗಬಹುದು. ಇನ್ಸ್ಟೆನ್ಸ್ನ ಸಾಧನ ಸಮೂಹದ ಮಾಲೀಕ ನಿರ್ವಾಹಕ; ನೋಡ್ನ ಮಾಲೀಕನೂ ಅವನೇ ಆಗಿರಲಿ.
ಮಾಲೀಕತ್ವ ಮತ್ತು ಮೋಡ್ ಅನ್ನು ಅತಿಥಿ ಪ್ರಕ್ರಿಯೆಗೆ ಹೊಂದಿಸಿ
unix-char ನಮೂದು ಕಂಟೇನರ್ ಒಳಗಿನ ನೋಡ್ಗೆ uid, gid ಮತ್ತು mode ಹೊಂದಿಸಬಹುದು. ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಸಾಧನ ತೆರೆಯುವ ಅಥವಾ ಕಂಟೇನರ್ ಅನ್ನು ವಿಶೇಷಾಧಿಕಾರ ಮೋಡ್ಗೆ ಬದಲಿಸುವ ಬದಲು, VPN ಕ್ಲೈಂಟ್ ಚಲಾಯಿಸುವ ಖಾತೆಗೆ ಹೊಂದಿಸಲು ಅವನ್ನು ಬಳಸಿ.
ಗೋಚರತೆ ಅನುಮತಿಗೆ ಸಮಾನವಲ್ಲ. root ಒಡೆತನದ ಮತ್ತು ಮೋಡ್ 600 ಇರುವ ನೋಡ್ ಅನಧಿಕೃತ ಬಳಕೆದಾರನಾಗಿ ಚಲಿಸುವ ಸೇವೆಗೆ ಗೋಚರವಾಗಿರುತ್ತದೆ ಮತ್ತು ಆದರೂ ಅದಕ್ಕೆ ತೆರೆಯಲಾಗದು. ಮೊದಲು ಅತಿಥಿ ಖಾತೆ ಪರಿಶೀಲಿಸಿ, ನಂತರ ಮಾಲೀಕತ್ವವನ್ನು ಆ ಖಾತೆಗೆ ಹೊಂದಿಸಿ, ಮತ್ತು ಮೋಡ್ ಅನ್ನು ಕ್ಲೈಂಟ್ಗೆ ಬೇಕಾದುದಕ್ಕಿಂತ ಅಗಲವಾಗಿ ಇಡಬೇಡಿ.
ಪ್ರಕ್ರಿಯೆಗೆ ಟನೆಲ್ ಇಂಟರ್ಫೇಸ್ ಸಂರಚಿಸುವ ಸಾಮರ್ಥ್ಯ ಕೂಡ ಬೇಕು, ಸಾಮಾನ್ಯವಾಗಿ ಕಂಟೇನರ್ನ ನೆಟ್ವರ್ಕ್ ನಾಮಸ್ಥಳದಲ್ಲಿ CAP_NET_ADMIN. ಸಾಧನ ನೀಡುವುದು ಆ ಸಾಮರ್ಥ್ಯ ನೀಡುವುದಿಲ್ಲ, ಮತ್ತು ಸಾಮರ್ಥ್ಯ ನೀಡುವುದು ಸಾಧನ ಒದಗಿಸುವುದಿಲ್ಲ; ಇವು ಸ್ವತಂತ್ರ ಅಗತ್ಯಗಳು.
ನಮೂದು ಏನು ನೀಡುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ತಿಳಿಯಿರಿ
ಗೋಚರ ನೋಡ್ ಎಂದರೆ ಕೆಲಸ ಮಾಡುವ VPN ಅಲ್ಲ. ಕ್ಲೈಂಟ್ ಪ್ಯಾಕೇಜ್ ಇನ್ನೂ ಸ್ಥಾಪಿಸಬೇಕು, ಪ್ರೊಫೈಲ್ ಇನ್ನೂ ಮಾನ್ಯವಾಗಿರಬೇಕು, ಮತ್ತು ಸೇವೆ ಇನ್ನೂ ಆರಂಭವಾಗಬೇಕು. ದೃಢೀಕರಣ, ಮಾರ್ಗಗಳು ಮತ್ತು DNS ಕ್ಲೈಂಟ್ನ ಕೆಲಸವೇ ಆಗಿ ಉಳಿಯುತ್ತವೆ, ಮತ್ತು ಅಲ್ಲಿನ ವೈಫಲ್ಯ ಸಾಧನ ನಮೂದು ತಪ್ಪು ಎಂಬ ಸಾಕ್ಷ್ಯವಲ್ಲ.
systemd ಇನ್ನೊಂದು ನಿರ್ಬಂಧ ಸೇರಿಸಬಹುದು. DeviceAllow ಅಥವಾ ಕಠಿಣ ಸಾಧನ ನೀತಿ ಇರುವ ಘಟಕ ಕಂಟೇನರ್ ನಿರ್ವಾಹಕ ಒದಗಿಸಿದ ನೋಡ್ಗೆ ಪ್ರವೇಶ ನಿರಾಕರಿಸಬಹುದು. ನೋಡ್ ಇದ್ದರೂ ಸೇವೆ ಅನುಮತಿ ದೋಷ ವರದಿ ಮಾಡಿದಾಗ ಘಟಕದ ಸಾಧನ ನೀತಿ ಪರಿಶೀಲಿಸಿ, ಮತ್ತು ಕಂಟೇನರ್ ಅಗಲಿಸುವ ಬದಲು ಆ ನೀತಿಯನ್ನೇ ಬದಲಿಸಿ.
ಹಾಟ್ಪ್ಲಗ್ ಐಚ್ಛಿಕ ಮತ್ತು ಸ್ಪಷ್ಟ. required=false ಇರುವ ನಮೂದಿಗೆ ಮೂಲ ಮಾರ್ಗ ಬೇಕು ಮತ್ತು ಹೋಸ್ಟ್ ಸಾಧನ ಬದಲಾದಂತೆ ಅದು ಕಾಣಿಸಿಕೊಳ್ಳಬಹುದು ಅಥವಾ ಮಾಯವಾಗಬಹುದು. ಅಂತಹ ಜೀವನಚಕ್ರ ಬಂದು ಹೋಗುವ ಹಾರ್ಡ್ವೇರ್ಗೆ ಸರಿಹೊಂದುತ್ತದೆ; VPN ಬೂಟ್ನಲ್ಲಿ ಬೇಕಾಗುವ TUN ಸಾಧನಕ್ಕೆ, ಐಚ್ಛಿಕ ನಮೂದು ಸೇವೆಯನ್ನು ಅದರ ಪೂರ್ವಷರತ್ತು ಇರುವ ಮೊದಲೇ ಆರಂಭಿಸಲು ಬಿಡಬಹುದು.
ಗೋಚರತೆ, ತೆರೆಯುವಿಕೆ ಮತ್ತು ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಆ ಕ್ರಮದಲ್ಲಿ ಪರಿಶೀಲಿಸಿ
ಮೊದಲು ಉದ್ದೇಶಿತ ಕಂಟೇನರ್ ಒಳಗಿನ ನೋಡ್ ಖಚಿತಪಡಿಸಿ. ಮಾರ್ಗ, ಪ್ರಮುಖ ಮತ್ತು ಲಘು ಸಂಖ್ಯೆಗಳು ಮತ್ತು ಮಾಲೀಕತ್ವ ಹೋಸ್ಟ್ ಸಾಧನ ಮತ್ತು ನೀವು ಸೇರಿಸಿದ ನಮೂದಿಗೆ ಹೊಂದಬೇಕು. ನೋಡ್ ಇಲ್ಲದಿದ್ದರೆ ನಿರ್ವಾಹಕ ನಮೂದನ್ನು ಅನ್ವಯಿಸಿಲ್ಲ ಅಥವಾ ಬೇರೆ ಇನ್ಸ್ಟೆನ್ಸ್ಗೆ ಅನ್ವಯಿಸಿದ್ದಾನೆ ಎಂದರ್ಥ.
lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'
ನಂತರ ಸೇವಾ ಖಾತೆ ಅದನ್ನು ತೆರೆಯಬಲ್ಲದೆಂದು ಖಚಿತಪಡಿಸಿ. ಆ ಖಾತೆಯಾಗಿ ಮಾಡುವ ಸಣ್ಣ ಪರೀಕ್ಷೆ ಮಾಲೀಕತ್ವದ ಸಮಸ್ಯೆಯನ್ನು ಸೇವಾ ಸಮಸ್ಯೆಯಿಂದ ಬೇರ್ಪಡಿಸುತ್ತದೆ. ಕೊನೆಯಲ್ಲಿ ಕ್ಲೈಂಟ್ ಆರಂಭಿಸಿ ಮತ್ತು ಟನೆಲ್ ಇಂಟರ್ಫೇಸ್ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿ; ಮೊದಲ ಎರಡು ಉತ್ತೀರ್ಣವಾಗಿದ್ದರೂ ಕ್ಲೈಂಟ್ ಪ್ರೊಫೈಲ್ ಅಥವಾ ಸಾಮರ್ಥ್ಯ ಇನ್ನೂ ತಪ್ಪಾಗಿರಬಹುದಾದ್ದರಿಂದ, ಸಂಪೂರ್ಣ ಮಾರ್ಗವನ್ನು ಸಾಬೀತುಪಡಿಸುವುದು ಆ ಮೂರನೇ ಹಂತ ಮಾತ್ರ.
ಬದಲಾವಣೆ ಅನುಮೋದನೆಯಾದಾಗ ಇನ್ಸ್ಟೆನ್ಸ್, ಸಾಧನ ಲೇಬಲ್, ಹೋಸ್ಟ್ ಮೂಲ, ಅತಿಥಿ ಮಾರ್ಗ ಮತ್ತು ಮಾಲೀಕ ಖಾತೆ ದಾಖಲಿಸಿ. ಆ ಐದು ಮೌಲ್ಯಗಳೇ ಮುಂದಿನ ಮರುಸೃಷ್ಟಿ, ಸ್ಥಳಾಂತರ ಅಥವಾ ಪ್ರೊಫೈಲ್ ಬದಲಾವಣೆ ಕಾಪಾಡಬೇಕಾದವು, ಮತ್ತು ಸಂದರ್ಭವಿಲ್ಲದ ಅನುಮತಿ ದೋಷಕ್ಕಿಂತ ಅವನ್ನು ಹೋಲಿಸುವುದು ಬಹಳ ಸುಲಭ.