WireGuard ਵਿੱਚ ਹੋਸਟ ਪ੍ਰੀਫਿਕਸ: ਇੱਕ ਪਤਾ ਕਿਉਂ ਕੰਮ ਕਰਦਾ ਹੈ ਤੇ ਬਾਕੀ ਨਹੀਂ
ਇੰਟਰਫੇਸ ਉੱਤੇ /32 ਇੱਕ ਵੈਧ ਹੋਸਟ ਪ੍ਰੀਫਿਕਸ ਹੈ ਅਤੇ ਸਿਰਫ਼ ਉਸੇ ਇੱਕ ਪਤੇ ਨੂੰ ਰੂਟ ਕਰਦਾ ਹੈ। AllowedIPs ਵੱਲੋਂ ਦਰਸਾਇਆ ਰੂਟ ਸ਼ਾਮਲ ਕਰੋ, ਫਿਰ ਵਾਪਸੀ ਰਾਹ ਜਾਂਚੋ।
ਟਨਲ ਚਾਲੂ ਹੈ, handshake ਹਰ ਦੋ ਮਿੰਟ ਬਾਅਦ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਦੂਜੇ ਪਾਸੇ ਠੀਕ ਇੱਕ ਪਤਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਪੀਅਰ ਦੇ ਟਨਲ ਪਤੇ ਉੱਤੇ ping ਕੰਮ ਕਰਦੇ ਹਨ; ਉਸਦੇ ਪਿੱਛੇ ਕੁਝ ਨਹੀਂ ਕੰਮ ਕਰਦਾ। ਕੋਈ ਇੰਟਰਫੇਸ ਦੀ ਸੰਰਚਨਾ ਪੜ੍ਹਦਾ ਹੈ, ਹੋਸਟ ਪ੍ਰੀਫਿਕਸ ਦੇਖਦਾ ਹੈ ਅਤੇ ਸਿੱਟਾ ਕੱਢਦਾ ਹੈ ਕਿ ਮਾਸਕ ਗਲਤ ਹੈ। ਇਸਨੂੰ /24 ਤੱਕ ਫੈਲਾਉਣਾ ping ਨੂੰ ਕੁਝ ਸਮਾਂ ਠੀਕ ਕਰਦਾ ਹੈ ਅਤੇ ਫਿਰ ਕੁਝ ਹੋਰ ਤੋੜ ਦਿੰਦਾ ਹੈ। ਪ੍ਰੀਫਿਕਸ ਕਦੇ ਕਾਰਨ ਨਹੀਂ ਸੀ, ਅਤੇ ਗੁੰਮ ਰੂਟ ਉਹ ਨਹੀਂ ਜੋ ਮਾਸਕ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ।
ਇੰਟਰਫੇਸ ਪ੍ਰੀਫਿਕਸ ਅਸਲ ਵਿੱਚ ਕੀ ਬਣਾਉਂਦਾ ਹੈ
Linux ਵਿੱਚ ਇੰਟਰਫੇਸ ਨੂੰ ਪਤਾ ਦੇਣ ਨਾਲ ਉਸ ਪ੍ਰੀਫਿਕਸ ਲਈ ਜੁੜਿਆ ਹੋਇਆ ਰੂਟ ਬਣਦਾ ਹੈ। ਹੋਸਟ ਪ੍ਰੀਫਿਕਸ ਦਿਓ ਤਾਂ ਜੁੜਿਆ ਰੂਟ ਇੱਕ ਪਤਾ ਢਕਦਾ ਹੈ। /24 ਦਿਓ ਤਾਂ ਉਹ 256 ਢਕਦਾ ਹੈ, ਅਤੇ ਇਹਨਾਂ ਵਿੱਚੋਂ ਹਰ ਇੱਕ ਹੁਣ ਉਸ ਲਿੰਕ ਉੱਤੇ ਪਹੁੰਚਯੋਗ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।
ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1
ਹੋਸਟ ਪ੍ਰੀਫਿਕਸ ਬਿੰਦੂ-ਤੋਂ-ਬਿੰਦੂ ਟਨਲ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਆਮ ਚੋਣ ਹੈ, ਕਿਉਂਕਿ ਦੂਜੇ ਸਿਰੇ ਉੱਤੇ ਠੀਕ ਇੱਕ ਪੀਅਰ ਹੁੰਦਾ ਹੈ। ਤੀਜਾ ਹੁਕਮ ਉਹੀ ਹੈ ਜੋ ਵਰਤੋਂਕਾਰ ਦੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ: ਇਹ ਦੱਸਦਾ ਹੈ ਕਿ ਕਰਨਲ ਉਸ ਮੰਜ਼ਿਲ ਲਈ ਕਿਹੜਾ ਇੰਟਰਫੇਸ ਵਰਤੇਗਾ, ਅਤੇ ਜੇ ਕੋਈ ਰੂਟ ਨਾ ਮਿਲੇ ਤਾਂ ਇਹ ਕੁਝ ਵੀ ਕੰਮ ਦਾ ਨਹੀਂ ਦਿਖਾਏਗਾ।
ਲੱਛਣ ਦੀ ਪੂਰੀ ਵਿਆਖਿਆ ਇਹੀ ਹੈ। ਇੱਕ ਪਤਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ ਕਿਉਂਕਿ ਉਸ ਲਈ ਜੁੜਿਆ ਰੂਟ ਮੌਜੂਦ ਹੈ, ਜਾਂ ਕਿਉਂਕਿ ਪੀਅਰ ਦੀ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਸੰਜੋਗ ਨਾਲ ਉਸਨੂੰ ਸ਼ਾਮਲ ਕਰਦੀ ਹੈ। ਬਾਕੀ ਸਭ ਦਾ ਕੋਈ ਰੂਟ ਨਹੀਂ ਅਤੇ WireGuard ਦੇ ਸ਼ਾਮਲ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਉਹ ਸੁੱਟ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਟਨਲ ਹਰ ਸਮੇਂ ਸਿਹਤਮੰਦ ਰਹਿੰਦੀ ਹੈ, ਇਸੇ ਲਈ handshake ਗਿਣਨ ਵਾਲਾ ਭਰੋਸਾ ਦਿਵਾਉਂਦਾ ਦਿਸਦਾ ਰਹਿੰਦਾ ਹੈ।
AllowedIPs ਇੱਕ ਨਾਮ ਹੇਠ ਦੋ ਨਿਯਮ ਹਨ
WireGuard ਦੀ ਪ੍ਰਤੀ-ਪੀਅਰ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਇੱਕ ਸਮੇਂ ਦੋ ਕੰਮ ਕਰਦੀ ਹੈ, ਅਤੇ ਸੰਰਚਨਾ ਦੀ ਵਾਕ-ਰਚਨਾ ਉਹਨਾਂ ਨੂੰ ਇੱਕ ਜਿਹਾ ਦਿਖਾਉਂਦੀ ਹੈ। ਅੰਦਰ ਆਉਂਦਿਆਂ ਇਹ ਤੈਅ ਕਰਦੀ ਹੈ ਕਿ ਪੀਅਰ ਕਿਹੜੇ ਸਰੋਤ ਪਤੇ ਪੇਸ਼ ਕਰ ਸਕਦਾ ਹੈ। ਬਾਹਰ ਜਾਂਦਿਆਂ ਇਹ ਚੁਣਦੀ ਹੈ ਕਿ ਪੈਕਟ ਕਿਹੜੇ ਪੀਅਰ ਨੂੰ ਭੇਜਿਆ ਜਾਵੇ, ਸਭ ਤੋਂ ਖ਼ਾਸ ਮੇਲ ਲੱਭ ਕੇ।
ਇਹਨਾਂ ਦੋਹਾਂ ਕੰਮਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਰੂਟਿੰਗ ਨਹੀਂ ਹੈ। ਕਰਨਲ ਨੂੰ ਅਜੇ ਵੀ ਤੈਅ ਕਰਨਾ ਹੁੰਦਾ ਹੈ ਕਿ ਪੈਕਟ ਟਨਲ ਇੰਟਰਫੇਸ ਦਾ ਹੈ, ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ WireGuard ਉਸ ਵੱਲ ਦੇਖੇ, ਅਤੇ ਇਹ ਫ਼ੈਸਲਾ ਰੂਟਿੰਗ ਟੇਬਲ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਚੌੜੀ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਵਾਲੀ ਪੀਅਰ ਐਂਟਰੀ ਆਪਣੇ ਆਪ ਕੋਈ ਰੂਟ ਨਹੀਂ ਲਗਾਉਂਦੀ।
ਇਸੇ ਲਈ ਕੋਈ ਸੰਰਚਨਾ ਪੂਰੀ ਦਿਸ ਸਕਦੀ ਹੈ ਅਤੇ ਅਸਮਾਨ ਵਿਵਹਾਰ ਕਰ ਸਕਦੀ ਹੈ। ਕਲਾਇੰਟ ਦੂਜੇ ਪਾਸੇ ਭੇਜਦਾ ਹੈ ਕਿਉਂਕਿ ਰੂਟ ਮੌਜੂਦ ਹੈ, ਅਤੇ ਜਵਾਬ ਕਦੇ ਨਹੀਂ ਪਹੁੰਚਦੇ ਕਿਉਂਕਿ ਦੂਜੇ ਪਾਸੇ ਦੀ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਕਲਾਇੰਟ ਦੇ ਸਰੋਤ ਨੂੰ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦੀ, ਜਾਂ ਕਿਉਂਕਿ ਦੂਜੇ ਪਾਸੇ ਦਾ ਵਾਪਸੀ ਰਾਹ ਨਹੀਂ। ਦੋਵੇਂ ਦਿਸ਼ਾਵਾਂ ਵੱਖਰੇ ਫ਼ੈਸਲੇ ਹਨ ਵੱਖਰੇ ਅਸਫਲਤਾ ਢੰਗਾਂ ਨਾਲ। ਤੁਸੀਂ ਕਿਹੜੀ ਜਾਂਚ ਰਹੇ ਹੋ ਇਹ ਲਿਖਣਾ ਨਿਦਾਨ ਦਾ ਅੱਧਾ ਹਿੱਸਾ ਹੈ।
ਰੂਟ ਕਿੱਥੋਂ ਆਉਂਦਾ ਹੈ
ਜੇ ਤੁਸੀਂ wg-quick ਵਰਤਦੇ ਹੋ, ਰੂਟ ਤੁਹਾਡੇ ਲਈ ਹਰ ਪੀਅਰ ਦੀ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਤੋਂ ਬਣਦੇ ਹਨ, ਜਦ ਤੱਕ ਤੁਸੀਂ Table = off ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਅਤੇ ਨਿਯੰਤਰਣ ਆਪ ਨਹੀਂ ਲਿਆ। ਇਹੀ ਔਜ਼ਾਰ ਦਾ ਦਰਜ ਵਿਵਹਾਰ ਹੈ, ਅਤੇ ਇਸੇ ਕਾਰਨ ਸਪਸ਼ਟ ਰੂਟ ਨਿਰਦੇਸ਼ਾਂ ਤੋਂ ਬਿਨਾਂ ਵੀ ਸੰਰਚਨਾ ਕੰਮ ਕਰਦੀ ਹੈ।
sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0
ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਦੀ ਤੁਲਨਾ ਉਹਨਾਂ ਰੂਟਾਂ ਨਾਲ ਕਰੋ ਜੋ ਅਸਲ ਵਿੱਚ ਮੌਜੂਦ ਹਨ। ਜੋ ਪੀਅਰ ਪੂਰਾ ਸਬਨੈੱਟ ਆਗਿਆ ਦਿੰਦਾ ਹੈ ਪਰ ਸਿਰਫ਼ ਇੱਕ ਹੋਸਟ ਰੂਟ ਬਣਾਉਂਦਾ ਹੈ, ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਸਹਾਇਕ ਕਦੇ ਚੱਲਿਆ ਹੀ ਨਹੀਂ, ਜਾਂ ਤੁਸੀਂ ਇੰਟਰਫੇਸ ਸਿੱਧਾ wg ਅਤੇ ip ਨਾਲ ਚਲਾ ਰਹੇ ਹੋ, ਅਤੇ ਫਿਰ ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਰੂਟ ਨਹੀਂ ਬਣਾਉਂਦਾ।
ਜਦ ਤੁਸੀਂ ਇਸਨੂੰ ਹੱਥ ਨਾਲ ਚਲਾਉਂਦੇ ਹੋ, ਰੂਟ ਇੱਕ ਲਾਈਨ ਹੈ ਅਤੇ ਇਸਦਾ ਆਕਾਰ ਸਪਸ਼ਟ ਹੈ: ਮੰਜ਼ਿਲ ਇੰਟਰਫੇਸ ਰਾਹੀਂ, ਬਿਨਾਂ ਗੇਟਵੇ ਕਿਉਂਕਿ ਲਿੰਕ ਬਿੰਦੂ-ਤੋਂ-ਬਿੰਦੂ ਹੈ। ਇਸਨੂੰ ਜੋੜਨਾ ਮਾੜੇ ਪ੍ਰੀਫਿਕਸ ਲਈ ਕੋਈ ਬਚਾਅ ਨਹੀਂ; ਇਹ ਉਸ ਡਿਜ਼ਾਈਨ ਦਾ ਗੁੰਮ ਅੱਧਾ ਹਿੱਸਾ ਹੈ ਜਿਸਨੇ ਰੂਟਿੰਗ ਆਪ ਲਈ।
ਚੌੜਾ ਪ੍ਰੀਫਿਕਸ ਪੀਅਰ ਐਂਟਰੀ ਨਹੀਂ ਜੋੜਦਾ
ਲੁਭਾਉਣ ਵਾਲਾ ਸੁਧਾਰ ਇਹ ਹੈ ਕਿ ਪਤਾ /24 ਕਰ ਦਿੱਤਾ ਜਾਵੇ ਤਾਂ ਜੋ ਜੁੜਿਆ ਰੂਟ ਸਰਵਰ ਦੇ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਨੂੰ ਢਕ ਲਵੇ। ਇਹ ਕੰਮ ਕਰਦਾ ਦਿਸਦਾ ਹੈ, ਅਤੇ ਕੰਮ ਕਰਦਾ ਦਿਸਣ ਦਾ ਕਾਰਨ ਇਹ ਹੈ ਕਿ ਜੁੜਿਆ ਰੂਟ ਹੁਣ ਮਿਲਦਾ ਹੈ, ਨਾ ਕਿ WireGuard ਨੇ ਕੁਝ ਨਵਾਂ ਸਿੱਖਿਆ।
ਤੁਸੀਂ ਇਹ ਵੀ ਕੀਤਾ ਕਿ ਪੂਰੀ ਰੇਂਜ ਨੂੰ ਉਸ ਲਿੰਕ ਉੱਤੇ ਸਿੱਧਾ ਪਹੁੰਚਯੋਗ ਐਲਾਨ ਦਿੱਤਾ, ਜਿਸ ਵਿੱਚ ਉਹ ਪਤੇ ਵੀ ਸ਼ਾਮਲ ਹਨ ਜੋ ਹੋਰ ਪੀਅਰਾਂ ਦੇ ਹਨ ਜਾਂ ਉਸ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਦੇ ਜੋ ਅਸਲ ਵਿੱਚ ਸਰਵਰ ਦੇ ਪਿੱਛੇ ਹੈ। ਉਹਨਾਂ ਪਤਿਆਂ ਵੱਲ ਟ੍ਰੈਫਿਕ ਹੁਣ ਟਨਲ ਵਿੱਚ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਇਹ ਦੂਜੇ ਪਾਸੇ ਨਿਕਲਦਾ ਹੈ ਜਾਂ ਨਹੀਂ ਇਹ ਸਰਵਰ ਦੀ ਆਪਣੀ ਰੂਟਿੰਗ ਅਤੇ ਆਗਿਆ ਵਾਲੀਆਂ ਸੂਚੀਆਂ ਉੱਤੇ ਨਿਰਭਰ ਹੈ।
ਕ੍ਰਿਪਟੋ ਪੱਖ ਕਿਸੇ ਵੀ ਹਾਲਤ ਵਿੱਚ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਹੁੰਦਾ। WireGuard ਨੂੰ ਪੀਅਰ ਚੁਣਨ ਲਈ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਵਿੱਚ ਮੰਜ਼ਿਲ ਢਕਣ ਵਾਲੀ ਐਂਟਰੀ ਅਜੇ ਵੀ ਚਾਹੀਦੀ ਹੈ, ਅਤੇ ਦੂਜੇ ਪਾਸੇ ਨੂੰ ਤੁਹਾਡਾ ਸਰੋਤ ਸਵੀਕਾਰ ਕਰਨ ਲਈ ਉਹ ਢਕਣ ਵਾਲੀ ਐਂਟਰੀ ਅਜੇ ਵੀ ਚਾਹੀਦੀ ਹੈ। ਚੌੜਾ ਇੰਟਰਫੇਸ ਪ੍ਰੀਫਿਕਸ ਇਹਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਵੀ ਨਹੀਂ ਦੇ ਸਕਦਾ।
ਕੁਝ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਦੋਵੇਂ ਦਿਸ਼ਾਵਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ
ਦੋਵੇਂ ਸਿਰੇ ਵੱਖਰੇ ਲਵੋ ਅਤੇ ਲਿਖੋ ਕਿ ਹਰ ਇੱਕ ਕੀ ਕਹਿੰਦਾ ਹੈ। ਕਲਾਇੰਟ ਉੱਤੇ ਰੂਟ ਅਤੇ ਪੀਅਰ ਐਂਟਰੀ; ਸਰਵਰ ਉੱਤੇ ਸ਼ੀਸ਼ੇ ਦੀ ਤਸਵੀਰ ਅਤੇ ਉਸਦਾ ਆਪਣਾ ਵਾਪਸੀ ਰਾਹ:
ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10
ਕੈਪਚਰ ਹੀ ਦਿਸ਼ਾ ਬਾਰੇ ਵਿਵਾਦ ਨਿਪਟਾਉਂਦਾ ਹੈ। ਜੇ ਬਾਹਰ ਜਾਂਦੇ ਪੈਕਟ ਟਨਲ ਇੰਟਰਫੇਸ ਉੱਤੇ ਦਿਸਦੇ ਹਨ ਅਤੇ ਸਰਵਰ ਕੁਝ ਦਰਜ ਨਹੀਂ ਕਰਦਾ, ਤਾਂ ਦੂਰ ਦਾ ਸਿਰਾ ਉਹਨਾਂ ਨੂੰ ਰੱਦ ਕਰ ਰਿਹਾ ਹੈ, ਆਮ ਤੌਰ ਉੱਤੇ ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਸਰੋਤ ਉਸਦੀ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਤੋਂ ਬਾਹਰ ਹੈ। ਜੇ ਬਿਲਕੁਲ ਕੁਝ ਨਾ ਦਿਸੇ, ਰੂਟ ਗੁੰਮ ਹੈ ਜਾਂ ਕਿਤੇ ਹੋਰ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।
ਫਿਰ ਸਭ ਤੋਂ ਤੰਗ ਸਿਰਾ ਠੀਕ ਕਰੋ। ਸਰਵਰ ਵੱਲ ਤੁਹਾਡੇ ਕਲਾਇੰਟ ਪਤੇ ਲਈ ਆਗਿਆ ਵਾਲੀ ਸੂਚੀ ਵਿੱਚ ਐਂਟਰੀ ਅਤੇ ਕਲਾਇੰਟ ਵੱਲ ਮੰਜ਼ਿਲ ਸਬਨੈੱਟ ਲਈ ਐਂਟਰੀ ਆਮ ਆਕਾਰ ਹੈ, ਅਤੇ ਇਹ ਇੰਟਰਫੇਸ ਪ੍ਰੀਫਿਕਸ ਨੂੰ ਛੇੜਦੀ ਨਹੀਂ। ਪ੍ਰੀਫਿਕਸ ਸਿਰਫ਼ ਤਦ ਫੈਲਾਓ ਜਦ ਪਤਾ ਯੋਜਨਾ ਸੱਚਮੁੱਚ ਉਸ ਲਿੰਕ ਉੱਤੇ ਸਾਂਝਾ ਸਬਨੈੱਟ ਚਾਹੁੰਦੀ ਹੋਵੇ, ਅਤੇ ਇਸਨੂੰ ਡੀਬੱਗਿੰਗ ਕਦਮ ਦੀ ਬਜਾਏ ਯੋਜਨਾ ਬਦਲਾਅ ਵਜੋਂ ਕਰੋ।