systemd-networkd ਨਾਲ ਦੁਬਾਰਾ ਜੁੜਨ ਤੋਂ ਬਾਅਦ ਵੀ ip rule ਟਿਕਾਈ ਰੱਖੋ
ਸ਼ੈੱਲ ਤੋਂ ਜੋੜਿਆ ip ਨਿਯਮ ਅਗਲੀ ਲਿੰਕ ਘਟਨਾ ਵਿੱਚ ਹੀ ਗਾਇਬ ਹੋ ਜਾਂਦਾ ਹੈ। ਨਿਯਮ, ਉਸ ਦੀ ਸਾਰਣੀ ਅਤੇ ਉਸ ਦੇ ਰੂਟ systemd-networkd ਵਿੱਚ ਐਲਾਨੋ, ਤਾਂ ਜੋ ਨੀਤੀ ਦੁਬਾਰਾ ਬਣੇ।
ip rule ਨਾਲ ਨੀਤੀ ਨਿਯਮ ਜੋੜੋ ਅਤੇ ਇਹ ਲਿੰਕ ਜਾਣ ਤੱਕ ਕੰਮ ਕਰਦਾ ਹੈ; ਉਸ ਪਲ ਇਹ ਬੱਸ ਨਹੀਂ ਹੈ। ਕੁਝ ਵੀ ਉੱਚੀ ਆਵਾਜ਼ ਵਿੱਚ ਫੇਲ੍ਹ ਨਹੀਂ ਹੋਇਆ: ਕਰਨਲ ਦੀ ਹਾਲਤ ਬਦਲ ਗਈ, ਅਤੇ ਕਿਸੇ ਵੀ ਸੰਰਚਨਾ ਮਾਲਕ ਨੂੰ ਪਤਾ ਨਹੀਂ ਸੀ ਕਿ ਨਿਯਮ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਟਿਕਣ ਵਾਲੇ ਅਤੇ ਨ ਟਿਕਣ ਵਾਲੇ ਨਿਯਮ ਵਿਚਕਾਰ ਸਾਰਾ ਫਰਕ ਇਹੀ ਹੈ। systemd-networkd ਵਾਲੇ ਹੋਸਟ ਉੱਤੇ ਹੱਲ ਇਹ ਹੈ ਕਿ ਨਿਯਮ ਨੂੰ ਮਾਲਕ ਦਿਓ, ਹਰ ਦੁਬਾਰਾ ਜੁੜਨ ਤੋਂ ਬਾਅਦ ਹੁਕਮ ਦੁਬਾਰਾ ਨਾ ਚਲਾਓ।
ਨਿਯਮ ਤਾਂ ਹੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਕੋਈ ਉਸ ਦਾ ਮਾਲਕ ਹੋਵੇ
ਕਰਨਲ ਦੀ ਰੂਟਿੰਗ ਨੀਤੀ ਹਾਲਤ ਹੈ, ਸੰਰਚਨਾ ਨਹੀਂ। ਇਹ ਚੱਲ ਰਹੇ ਸਿਸਟਮ ਵਿੱਚ ਰਹਿੰਦੀ ਹੈ, ਅਤੇ ਜੋ ਵੀ ਉਸ ਇੰਟਰਫ਼ੇਸ ਨੂੰ ਢਾਹੁੰਦਾ ਹੈ ਜਿਸ ਉੱਤੇ ਇਹ ਨਿਰਭਰ ਹੈ, ਉਹ ਇਸ ਨੂੰ ਨਾਲ ਲੈ ਜਾ ਸਕਦਾ ਹੈ। ਸ਼ੈੱਲ ਦਾ ਹੁਕਮ ਉਸ ਹਾਲਤ ਨੂੰ ਬਦਲਦਾ ਹੈ ਅਤੇ ਇਰਾਦੇ ਦਾ ਕੋਈ ਰਿਕਾਰਡ ਨਹੀਂ ਛੱਡਦਾ।
ਨੈੱਟਵਰਕ ਮੈਨੇਜਰ ਉਲਟੇ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹਨ: ਉਹ ਸੰਰਚਨਾ ਪੜ੍ਹਦੇ ਹਨ, ਲਾਗੂ ਕਰਦੇ ਹਨ, ਅਤੇ ਲਿੰਕ ਘਟਨਾ ਪਿਛਲੀ ਹਾਲਤ ਨੂੰ ਅਵੈਧ ਕਰ ਦੇਣ 'ਤੇ ਦੁਬਾਰਾ ਲਾਗੂ ਕਰਦੇ ਹਨ। ਉਨ੍ਹਾਂ ਦੀ ਸੰਰਚਨਾ ਵਿੱਚ ਐਲਾਨਿਆ ਨਿਯਮ ਦੁਬਾਰਾ ਬਣਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਉਨ੍ਹਾਂ ਦੇ ਕੋਲ ਜੋੜਿਆ ਨਿਯਮ ਮਾਲਕ ਤੋਂ ਬਿਨਾਂ ਬਾਹਰੀ ਵਸਤੂ ਹੁੰਦਾ ਹੈ।
ਇਸ ਫਰਕ ਦਾ networkd ਵਿੱਚ ਨਾਮ ਹੈ, ਅਤੇ ਕੁਝ ਵੀ ਚਾਲੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਪੜ੍ਹਨਾ ਚਾਹੀਦਾ ਹੈ। ਹਾਲੀਆ ਸੰਸਕਰਣਾਂ ਵਿੱਚ ਬਾਹਰੀ ਨਿਯਮ ਡਿਫ਼ਾਲਟ ਰੂਪ ਵਿੱਚ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਉਹ ਹੈਰਾਨ ਹੁੰਦੇ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ ਲੱਗਾ ਸੀ ਕਿ ਉਨ੍ਹਾਂ ਦੀਆਂ ਹੱਥ ਨਾਲ ਲਿਖੀਆਂ ਐਂਟਰੀਆਂ ਰਹਿਣਗੀਆਂ।
ਕਿਸੇ ਸੈਟਿੰਗ 'ਤੇ ਭਰੋਸਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸੰਸਕਰਣ ਪੜ੍ਹੋ
ਮਾਲਕੀ ਦਾ ਵਿਵਹਾਰ networkd.conf ਦੀ ਇੱਕ ਸੈਟਿੰਗ ਨਾਲ ਨਿਯੰਤਰਿਤ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਉਹ ਸੈਟਿੰਗ ਪੁਰਾਣੇ systemd ਸੰਸਕਰਣਾਂ ਵਿੱਚ ਨਹੀਂ ਹੈ। ਇਸ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਡਿਜ਼ਾਈਨ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਥਾਪਿਤ ਸੰਸਕਰਣ ਜਾਂਚੋ, ਕਿਉਂਕਿ ਪੁਰਾਣਾ ਹੋਸਟ ਤੁਹਾਡੇ ਪੜ੍ਹ ਰਹੇ ਦਸਤਾਵੇਜ਼ ਨਾਲੋਂ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਰਦਾ ਹੈ।
ਦੋ ਮੁੱਲ ਮਹੱਤਵਪੂਰਨ ਹਨ। ਇੱਕ ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ networkd ਸੰਰਚਨਾ ਵਿੱਚ ਐਲਾਨੇ ਨਾ ਗਏ ਨਿਯਮ ਹਟਾਏ ਜਾਣ ਜਾਂ ਨਾ, ਅਤੇ ਦੂਜਾ ਰੂਟਾਂ ਲਈ ਉਹੀ ਕਰਦਾ ਹੈ। ਦੋਵੇਂ ਨੀਤੀ ਦੀ ਸਮੱਗਰੀ ਨਹੀਂ, ਮਾਲਕੀ ਬਾਰੇ ਹਨ, ਅਤੇ ਦੋਵੇਂ ਮੌਜੂਦਾ ਸੰਸਕਰਣਾਂ ਵਿੱਚ ਡਿਫ਼ਾਲਟ ਰੂਪ ਵਿੱਚ ਸਖ਼ਤ ਵਿਵਹਾਰ ਚੁਣਦੇ ਹਨ। ਇਨ੍ਹਾਂ ਨੂੰ ਸੰਸਾਰ ਭਰ ਵਿੱਚ ਬੰਦ ਕਰਨ ਨਾਲ ਹਰ ਬਾਹਰੀ ਨਿਯਮ ਜੀਵਤ ਰਹਿੰਦਾ ਹੈ, ਜੋ ਇੱਕ ਲੋੜੀਂਦੀ VPN ਨੀਤੀ ਐਲਾਨਣ ਨਾਲੋਂ ਬਹੁਤ ਵੱਡਾ ਫ਼ੈਸਲਾ ਹੈ।
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
ਉਹ grep ਤੁਹਾਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਕੀ ਸੈੱਟ ਹੈ ਅਤੇ ਵਿਕਰੇਤਾ ਦਾ ਡਿਫ਼ਾਲਟ ਕੀ ਹੈ। ਗੈਰਹਾਜ਼ਰੀ ਵੀ ਜਾਣਕਾਰੀ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੰਪਾਇਲ ਕੀਤਾ ਡਿਫ਼ਾਲਟ ਲਾਗੂ ਹੈ। ਡਿਫ਼ਾਲਟ ਨੂੰ ਆਪਣੀਆਂ ਟਿੱਪਣੀਆਂ ਵਿੱਚ ਲਿਖੋ ਤਾਂ ਜੋ ਅਗਲੇ ਵਿਅਕਤੀ ਨੂੰ ਇਹ ਦੁਬਾਰਾ ਲੱਭਣਾ ਨਾ ਪਵੇ।
ਨਿਯਮ ਅਤੇ ਉਹ ਸਾਰਣੀ ਐਲਾਨੋ ਜਿਸ ਵੱਲ ਇਹ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ
.network ਫ਼ਾਈਲ ਵਿੱਚਲਾ ਨਿਯਮ ਇੱਕ ਸਾਰਣੀ ਦਾ ਨਾਮ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਨਾਮ ਬੱਸ ਇਹੀ ਕਰਦਾ ਹੈ। ਇਹ ਉਸ ਸਾਰਣੀ ਦੇ ਅੰਦਰਲੇ ਰੂਟ ਨਹੀਂ ਬਣਾਉਂਦਾ ਅਤੇ ਇਹ ਨਹੀਂ ਜਾਂਚਦਾ ਕਿ ਉਹ ਸਮਝਦਾਰ ਹਨ। ਰੂਟਾਂ ਤੋਂ ਬਿਨਾਂ ਨਿਯਮ ਐਲਾਨਣ ਨਾਲ ਅਜਿਹੀ ਨੀਤੀ ਬਣਦੀ ਹੈ ਜੋ ਟ੍ਰੈਫ਼ਿਕ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੈ ਅਤੇ ਫਿਰ ਉਸ ਨੂੰ ਡੇਗ ਦਿੰਦੀ ਹੈ।
ਰੂਟ ਉਸੇ ਫ਼ਾਈਲ ਵਿੱਚ ਐਲਾਨੋ, ਪਹੁੰਚਯੋਗ ਅਗਲੇ ਹੌਪ ਅਤੇ ਸਹੀ ਸਾਰਣੀ ਨਾਲ। ਐਲਾਨੇ ਨਿਯਮ ਵਿੱਚ ਤਰਜੀਹ ਰੱਖੋ ਤਾਂ ਜੋ ਕ੍ਰਮਬੱਧ ਸੂਚੀ ਵਿੱਚ ਇਹ ਉੱਥੇ ਪਵੇ ਜਿੱਥੇ ਤੁਸੀਂ ਆਸ ਕਰਦੇ ਹੋ। ਗ਼ਲਤ ਸਾਰਣੀ ਤੱਕ ਸਮੇਂ ਤੋਂ ਪਹਿਲਾਂ ਪਹੁੰਚਣ ਵਾਲਾ ਨਿਯਮ ਉਸ ਸੇਵਾ ਨਾਲੋਂ ਵੱਧ ਟ੍ਰੈਫ਼ਿਕ ਬਦਲਦਾ ਹੈ ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਠੀਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਸੀ। ਹੇਠਾਂ ਦਿੱਤੇ ਟੁਕੜੇ ਨੂੰ ਪੂਰੀ ਫ਼ਾਈਲ ਨਹੀਂ, ਆਕਾਰ ਵਜੋਂ ਪੜ੍ਹੋ, ਕਿਉਂਕਿ ਇੰਟਰਫ਼ੇਸ ਦੀ ਮਾਲਕੀ ਅਤੇ ਕਨੈਕਸ਼ਨ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਅਜੇ ਵੀ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000
[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100
ਫਿਰ ਦੁਬਾਰਾ ਲੋਡ ਕਰੋ ਅਤੇ ਫ਼ਾਈਲ ਦੀ ਥਾਂ ਕਰਨਲ ਦੀ ਹਾਲਤ ਪੜ੍ਹੋ। ਸਾਫ਼ ਤਰੀਕੇ ਨਾਲ ਪਾਰਸ ਹੋਈ ਸੰਰਚਨਾ ਵੀ ਤੁਹਾਡੇ ਇਰਾਦੇ ਤੋਂ ਬਿਨਾਂ ਨਿਯਮ ਬਣਾ ਸਕਦੀ ਹੈ, ਅਤੇ ਦੋਵੇਂ ਦ੍ਰਿਸ਼ ਤਾਂ ਹੀ ਮਿਲਦੇ ਹਨ ਜਦੋਂ ਐਲਾਨ ਪੂਰਾ ਸੀ।
ਇੰਟਰਫ਼ੇਸ ਲਈ ਇੱਕੋ ਮਾਲਕ ਚੁਣੋ
ਇੱਕ ਹੀ ਸੁਰੰਗ ਉੱਤੇ ਦੋ ਮੈਨੇਜਰ ਅਜਿਹਾ ਝਗੜਾ ਪੈਦਾ ਕਰਦੇ ਹਨ ਜੋ ਦੋਵਾਂ ਵਿੱਚ ਬੱਗ ਵਰਗਾ ਲੱਗਦਾ ਹੈ। ਮੌਜੂਦਾ wg-quick ਸੈੱਟਅੱਪ ਨੂੰ networkd ਵਿੱਚ ਆਯਾਤ ਕਰਨਾ ਜੋੜ ਨਹੀਂ, ਤਬਦੀਲੀ ਹੈ, ਅਤੇ ਦੋਵੇਂ ਚਲਾਉਣ ਨਾਲ ਇੰਟਰਫ਼ੇਸ ਅਤੇ ਉਸ ਦੇ ਨਿਯਮ ਦੋ ਮਾਲਕਾਂ ਦੇ ਅਧੀਨ ਰਹਿ ਜਾਂਦੇ ਹਨ।
ਤਬਦੀਲੀ ਇੱਕੋ ਵਾਰ ਕਰੋ: ਪੁਰਾਣੀ ਯੂਨਿਟ ਰੋਕੋ, ਅਸਮਰੱਥ ਕਰੋ, networkd ਵਿੱਚ ਇੰਟਰਫ਼ੇਸ ਅਤੇ ਉਸ ਦੇ ਰੂਟ ਐਲਾਨੋ, ਫਿਰ ਦੁਬਾਰਾ ਲੋਡ ਕਰੋ। ਜਾਂਚੋ ਕਿ ਪੁਰਾਣੀ ਯੂਨਿਟ ਬੂਟ 'ਤੇ ਵਾਪਸ ਨਹੀਂ ਆ ਸਕਦੀ। ਰੀਬੂਟ ਤੋਂ ਬਾਅਦ ਦੁਬਾਰਾ ਸਰਗਰਮ ਹੋਣ ਵਾਲੀ ਬਚੀ ਯੂਨਿਟ ਤੁਹਾਡੇ ਹੁਣੇ ਐਲਾਨੇ ਫ਼ਾਈਲ ਨੂੰ ਉੱਤੇ ਲਿਖ ਦਿੰਦੀ ਹੈ। ਨਵੀਂ ਦੇ ਇੱਕ ਦੁਬਾਰਾ ਜੁੜਨ ਨੂੰ ਝੱਲਣ ਤੱਕ ਪੁਰਾਣੀ ਸੰਰਚਨਾ ਫ਼ਾਈਲ ਰੱਖੋ, ਫਿਰ ਉਸ ਨੂੰ ਰਿਟਾਇਰ ਕਰੋ।
ਨਿਸ਼ਾਨ ਦੀ ਮਾਲਕੀ ਵੀ ਉਨੀ ਹੀ ਦੇਖਭਾਲ ਮੰਗਦੀ ਹੈ: ਜੇ ਨਿਯਮ ਫ਼ਾਇਰਵਾਲ ਨਿਸ਼ਾਨ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ ਤਾਂ ਕਿਸੇ ਨੇ ਉਹ ਨਿਸ਼ਾਨ ਸੈੱਟ ਕਰਨਾ ਹੈ। ਜੋ ਨਿਯਮ ਅਜਿਹੇ ਨਿਸ਼ਾਨ ਦਾ ਹਵਾਲਾ ਦਿੰਦਾ ਹੈ ਜਿਸ ਨੂੰ ਕੋਈ ਸੈੱਟ ਨਹੀਂ ਕਰਦਾ, ਉਹ ਮ੍ਰਿਤ ਸੰਰਚਨਾ ਹੈ ਜੋ ਜਾਣਬੁੱਝ ਕੇ ਕੀਤੀ ਲੱਗਦੀ ਹੈ।
ਜੀਵਨ-ਚੱਕਰ ਦੀਆਂ ਘਟਨਾਵਾਂ ਦਾ ਅਭਿਆਸ ਕਰੋ
ਸੰਰਚਨਾ ਘਟਨਾਵਾਂ ਦੌਰਾਨ ਆਪਣੇ ਵਿਵਹਾਰ ਜਿੰਨੀ ਹੀ ਚੰਗੀ ਹੁੰਦੀ ਹੈ। ਲਿੰਕ ਹੇਠਾਂ ਲਾਹੋ, ਉੱਤੇ ਲਿਆਓ, ਸੇਵਾ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਪਤਾ ਨਵਾਂ ਕਰੋ। ਹਰ ਇੱਕ ਤੋਂ ਬਾਅਦ ਨਿਯਮਾਂ ਦੀ ਸੂਚੀ ਅਤੇ ਸਾਰਣੀ ਦੀ ਸਮੱਗਰੀ ਪੜ੍ਹੋ।
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
ਲੋੜੀਂਦਾ ਨਤੀਜਾ ਇਹ ਹੈ ਕਿ ਉਹੀ ਮਾਲਕੀ ਵਾਲੀ ਨੀਤੀ ਦੁਬਾਰਾ ਬਣੇ ਅਤੇ ਪੁਰਾਣੀ ਹਾਲਤ ਰਿਟਾਇਰ ਹੋਵੇ, ਜੋ ਹਰ ਦੁਬਾਰਾ ਜੁੜਨ ਤੋਂ ਬਾਅਦ ਸ਼ੈੱਲ ਨਿਯਮ ਦੁਬਾਰਾ ਜੋੜਨ ਨਾਲੋਂ ਵੱਧ ਟਿਕਾਊ ਹੈ। ਤਬਦੀਲੀ-ਰਿਕਾਰਡ ਵਿੱਚ ਇੱਕ ਲਾਈਨ ਰੱਖੋ ਜੋ ਨਿਯਮ ਦੀ ਮਾਲਕ ਫ਼ਾਈਲ ਅਤੇ ਇਸ ਨੂੰ ਸਹਾਰਾ ਦੇਣ ਵਾਲਾ ਸੰਸਕਰਣ ਦੱਸੇ। ਫਿਰ ਅਗਲਾ ਇੰਜੀਨੀਅਰ ਸ਼ੈੱਲ ਇਤਿਹਾਸ ਖੋਦੇ ਬਿਨਾਂ ਨੀਤੀ ਲੱਭ ਸਕੇਗਾ। ਜਿਸ ਨਿਯਮ ਦਾ ਕੋਈ ਮਾਲਕ ਨਹੀਂ, ਉਹ ਦੁਬਾਰਾ ਗੁਆਚਣ ਵਾਲਾ ਨਿਯਮ ਹੈ।