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'
ਫਿਰ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਸੇਵਾ ਖਾਤਾ ਇਸ ਨੂੰ ਖੋਲ੍ਹ ਸਕਦਾ ਹੈ। ਉਸ ਖਾਤੇ ਵਜੋਂ ਛੋਟਾ ਪਰੀਖਣ ਮਾਲਕੀ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਸੇਵਾ ਦੀ ਸਮੱਸਿਆ ਤੋਂ ਵੱਖ ਕਰਦਾ ਹੈ। ਅੰਤ ਵਿੱਚ ਕਲਾਇੰਟ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਟਨਲ ਇੰਟਰਫ਼ੇਸ ਦਿਸਦਾ ਹੈ; ਸਿਰਫ਼ ਉਹੀ ਤੀਜਾ ਕਦਮ ਪੂਰਾ ਰਾਹ ਸਾਬਤ ਕਰਦਾ ਹੈ, ਕਿਉਂਕਿ ਪਹਿਲੇ ਦੋ ਪਾਸ ਹੋ ਸਕਦੇ ਹਨ ਜਦਕਿ ਕਲਾਇੰਟ ਪ੍ਰੋਫ਼ਾਈਲ ਜਾਂ ਸਮਰੱਥਾ ਅਜੇ ਵੀ ਗਲਤ ਹੋਵੇ।
ਬਦਲਾਅ ਮਨਜ਼ੂਰ ਹੋਣ ਵੇਲੇ ਇੰਸਟੈਂਸ, ਡਿਵਾਈਸ ਲੇਬਲ, ਹੋਸਟ ਸਰੋਤ, ਮਹਿਮਾਨ ਰਾਹ ਅਤੇ ਮਾਲਕ ਖਾਤਾ ਦਰਜ ਕਰੋ। ਉਹੀ ਪੰਜ ਮੁੱਲ ਹਨ ਜੋ ਅਗਲੀ ਦੁਬਾਰਾ ਬਣਾਉਣ, ਸਥਾਨਾਂਤਰਣ ਜਾਂ ਪ੍ਰੋਫ਼ਾਈਲ ਬਦਲਾਅ ਨੂੰ ਸੰਭਾਲਣੇ ਚਾਹੀਦੇ ਹਨ, ਅਤੇ ਸੰਦਰਭ-ਰਹਿਤ ਇਜਾਜ਼ਤ ਗਲਤੀ ਨਾਲੋਂ ਇਨ੍ਹਾਂ ਦੀ ਤੁਲਨਾ ਕਿਤੇ ਸੌਖੀ ਹੈ।