ਸਰਵਰ ਦਾ IP ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਵੀ SNAT ਨਿਯਮ ਪੁਰਾਣੇ ਦਾ ਹੀ ਜ਼ਿਕਰ ਕਰਦਾ ਹੈ
ਟਨਲ ਜੁੜ ਸਕਦੀ ਹੈ ਪਰ ਹਰ ਫਾਰਵਰਡ ਕੀਤਾ ਪੈਕੇਟ ਅਟਕ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਅਨੁਵਾਦ ਨਿਯਮ ਅਜੇ ਵੀ ਉਸ ਪਤੇ 'ਤੇ ਮੁੜ ਲਿਖਦਾ ਹੈ ਜੋ ਹੋਸਟ ਕੋਲ ਹੁਣ ਨਹੀਂ ਹੈ।
ਸਰਵਰ ਨਵੇਂ ਪਤੇ 'ਤੇ ਚਲਾ ਗਿਆ, ਕਲਾਇੰਟ ਅਜੇ ਵੀ ਜੁੜਦੇ ਹਨ, ਅਤੇ ਉਹ ਜੋ ਭੇਜਦੇ ਹਨ ਉਸ ਵਿੱਚੋਂ ਕੁਝ ਵੀ ਇੰਟਰਨੈੱਟ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚਦਾ। ਇਹੀ ਵੰਡ ਸੁਰਾਗ ਹੈ: ਸੁਣਨ ਵਾਲਾ ਸਾਕਟ ਅਤੇ ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ ਬਦਲੀ ਵਿੱਚ ਟਿਕ ਗਏ, ਇਸ ਲਈ ਟਨਲ ਉੱਪਰ ਆਉਂਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਵਰਡ ਕੀਤੇ ਪੈਕੇਟਾਂ 'ਤੇ ਲਾਗੂ ਹੁੰਦਾ ਸਰੋਤ ਅਨੁਵਾਦ ਅਜੇ ਵੀ ਅਜਿਹੇ ਪਤੇ ਦਾ ਜ਼ਿਕਰ ਕਰਦਾ ਹੈ ਜੋ ਹੋਸਟ ਕੋਲ ਹੁਣ ਨਹੀਂ ਹੈ। ਉਹਨਾਂ ਮੁੜ ਲਿਖੇ ਪੈਕੇਟਾਂ ਦੇ ਜਵਾਬ ਹੁਣ ਨਾ ਮੌਜੂਦ ਮਸ਼ੀਨ ਵੱਲ ਜਾਂਦੇ ਹਨ।
ਜੁੜਨਾ ਅਤੇ ਫਾਰਵਰਡਿੰਗ ਵੱਖ-ਵੱਖ ਥਾਵਾਂ 'ਤੇ ਫੇਲ ਹੁੰਦੇ ਹਨ
ਸਥਾਪਨਾ ਉਸ ਅੰਤਿਮ ਬਿੰਦੂ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ ਜੋ ਕਲਾਇੰਟ ਪਹਿਲਾਂ ਹੀ ਜਾਣਦੇ ਹਨ: ਜਨਤਕ ਪਤਾ, ਉਸ ਅੱਗੇ ਦੀ ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ ਅਤੇ ਅੰਦਰ ਦਾ ਸਰੋਤਾ। ਫਾਰਵਰਡ ਕੀਤਾ ਟ੍ਰੈਫਿਕ ਦੂਜੇ ਫੈਸਲੇ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਜੋ ਪੈਕੇਟ ਦੇ ਟਨਲ ਵਿੱਚ ਦਾਖਲ ਹੋਣ ਤੋਂ ਬਾਅਦ ਲਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਹੋਸਟ ਆਪਣਾ ਸਰੋਤ ਮੁੜ ਲਿਖਦਾ ਹੈ ਤਾਂ ਜੋ ਜਵਾਬ ਵਾਪਸੀ ਦਾ ਰਾਹ ਲੱਭ ਸਕਣ।
ਪਤਾ ਬਦਲਣ ਨਾਲ ਸਿਰਫ਼ ਦੂਜਾ ਫੈਸਲਾ ਟੁੱਟਦਾ ਹੈ, ਅਤੇ ਇਸੇ ਲਈ ਲੱਛਣ "ਜੁੜਿਆ ਹੈ ਪਰ ਇੰਟਰਨੈੱਟ ਨਹੀਂ" ਵਜੋਂ ਪੜ੍ਹਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਇਹ ਵੀ ਦੱਸਦਾ ਹੈ ਕਿ ਕਲਾਇੰਟ ਪਾਸੇ ਦੀਆਂ ਆਮ ਜਾਂਚਾਂ ਸਿਹਤਮੰਦ ਕਿਉਂ ਦਿਖਦੀਆਂ ਹਨ: ਹੈਂਡਸ਼ੇਕ ਪੂਰਾ ਹੁੰਦਾ ਹੈ, ਕਲਾਇੰਟ ਨੂੰ ਪਤਾ ਮਿਲਦਾ ਹੈ, ਅਤੇ ਸਰਵਰ ਦੇ ਟਨਲ ਪਤੇ 'ਤੇ ping ਵੀ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ। ਖਰਾਬੀ ਦੂਜੇ ਪਾਸੇ ਹੋਣ 'ਤੇ ਵੀ ਕਲਾਇੰਟ 'ਤੇ ਘੰਟੇ ਬਰਬਾਦ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਨਿਯਮਾਂ ਦੀ ਸਾਰਣੀ ਪਹਿਲੀ ਵੇਖਣ ਦੀ ਥਾਂ ਹੈ।
ਸੋਧ ਤੋਂ ਪਹਿਲਾਂ ਨਿਯਮ ਅਤੇ ਉਸ ਦੇ ਕਾਊਂਟਰ ਪੜ੍ਹੋ
ਕਾਊਂਟਰਾਂ ਸਮੇਤ ਅਨੁਵਾਦ ਨਿਯਮਾਂ ਦੀ ਸੂਚੀ ਬਣਾਓ ਅਤੇ ਸੰਰਚਿਤ ਸਰੋਤ ਦੀ ਤੁਲਨਾ ਉਹਨਾਂ ਪਤਿਆਂ ਨਾਲ ਕਰੋ ਜੋ ਹੋਸਟ ਕੋਲ ਅਸਲ ਵਿੱਚ ਹਨ। ਮਰੇ ਪਤੇ 'ਤੇ ਮੁੜ ਲਿਖਿਆ ਨਿਯਮ ਆਮ ਤੌਰ 'ਤੇ ਅੰਦਰ ਜਾਣ ਵਾਲੇ ਰਾਹ 'ਤੇ ਟ੍ਰੈਫਿਕ ਦਿਖਾਉਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਪੈਕੇਟ ਉਸ ਤੱਕ ਪਹੁੰਚਦੇ ਹਨ ਅਤੇ ਅਨੁਵਾਦ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਵਾਪਸੀ ਦੇ ਰਾਹ 'ਤੇ ਕੁਝ ਨਹੀਂ।
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
ਉੱਥੇ ਹੁੰਦਿਆਂ ਤਿੰਨ ਖੇਤਰ ਜਾਂਚੋ: ਸਰੋਤ ਮਿਲਾਣ ਵਿੱਚ ਪੂਲ, ਨਿਯਮ ਕਿਸੇ ਦਾ ਨਾਂ ਲਵੇ ਤਾਂ ਐਗਜ਼ਿਟ ਇੰਟਰਫੇਸ, ਅਤੇ ਉਹ ਬਾਹਰ ਕੱਢਣਾ ਜੋ ਟਨਲ-ਤੋਂ-ਟਨਲ ਟ੍ਰੈਫਿਕ ਨੂੰ ਮੁੜ ਲਿਖਣ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਸੋਧ ਵੇਲੇ ਉਹ ਬਾਹਰ ਕੱਢਣਾ ਗੁਆਉਣਾ ਸੌਖਾ ਹੈ, ਅਤੇ ਇਸ ਨੂੰ ਗੁਆਉਣ ਨਾਲ ਸਾਥੀਆਂ ਵਿਚਕਾਰ ਟ੍ਰੈਫਿਕ ਕੰਮ ਕਰਦਾ ਦਿਖਦਾ ਹੈ, ਪਰ ਉਸ ਦੇ ਜਵਾਬ ਅਜੀਬ ਰਾਹ ਲੈਂਦੇ ਹਨ।
ਜੇ ਕਾਊਂਟਰ ਸਿਫ਼ਰ 'ਤੇ ਅਟਕੇ ਹਨ, ਤਾਂ ਪੈਕੇਟ ਕਦੇ ਇਸ ਨਿਯਮ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚਦੇ ਅਤੇ ਪਤਾ ਮੌਜੂਦਾ ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ। ਲੜੀ ਵਿੱਚ ਪਹਿਲਾਂ ਦਾ ਕੋਈ ਮੁਕਾਬਲਾਵੀ ਨਿਯਮ ਲੱਭੋ, ਜੋ ਤਦ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਕੋਈ ਮੂਲ ਨੂੰ ਸੋਧਣ ਦੀ ਥਾਂ ਬਦਲ ਜੋੜ ਦਿੰਦਾ ਹੈ। ਇੱਕ ਮਿੰਟ ਪਹਿਲਾਂ ਲਿਖੇ ਆਉਟਪੁੱਟ ਨਾਲ ਨਿਯਮ ਨੰਬਰਾਂ ਦੀ ਤੁਲਨਾ ਕਰੋ। ਕ੍ਰਮ ਸੰਰਚਨਾ ਦਾ ਹਿੱਸਾ ਹੈ, ਸਜਾਵਟੀ ਵੇਰਵਾ ਨਹੀਂ।
ਸਰੋਤ ਬਦਲੋ, ਜਾਂ ਉਸ ਦਾ ਨਾਂ ਲੈਣਾ ਬੰਦ ਕਰੋ
ਜਦੋਂ ਹੋਸਟ ਕੋਲ ਸਥਿਰ ਪਤਾ ਹੋਵੇ, ਤਾਂ ਦੂਜਾ ਜੋੜਨ ਦੀ ਥਾਂ ਨਿਯਮ ਨੂੰ ਉਸ ਦੀ ਥਾਂ 'ਤੇ ਬਦਲੋ। ਨਿਯਮ ਨੰਬਰ ਨਾਲ ਬਦਲਣਾ ਉਹ ਕ੍ਰਮ ਬਚਾਉਂਦਾ ਹੈ ਜਿਸ 'ਤੇ ਲੜੀ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਨਿਰਭਰ ਹੈ।
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
ਜਦੋਂ ਪਤਾ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਕਿਸੇ ਸਰੋਤ ਦਾ ਨਾਂ ਨਾ ਲਵੋ ਅਤੇ ਕਰਨਲ ਨੂੰ ਐਗਜ਼ਿਟ ਇੰਟਰਫੇਸ ਤੋਂ ਮੌਜੂਦਾ ਚੁਣਨ ਦਿਓ। ਇਹ ਰੂਪ ਅਗਲੀ ਬਦਲੀ ਨੂੰ ਸੋਧ ਤੋਂ ਬਿਨਾਂ ਪਾਰ ਕਰਦਾ ਹੈ, ਇਸ ਕੀਮਤ 'ਤੇ ਕਿ ਕਿਹੜਾ ਪਤਾ ਵਰਤਿਆ ਗਿਆ ਲੁਕਿਆ ਰਹਿੰਦਾ ਹੈ।
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ IPv4 ਫਾਰਵਰਡਿੰਗ ਪ੍ਰਬੰਧਿਤ ਸੰਰਚਨਾ ਰਾਹੀਂ ਅਜੇ ਵੀ ਸਮਰੱਥ ਹੈ, ਫਿਰ ਵੰਡ ਦੇ ਆਪਣੇ ਤੰਤਰ ਨਾਲ ਨਿਯਮ ਨੂੰ ਸਥਾਈ ਬਣਾਓ। ਸਿਰਫ਼ ਚੱਲ ਰਹੇ ਕਰਨਲ ਵਿੱਚ ਕੀਤਾ ਬਦਲਾਅ ਅਗਲੀ ਰੀਬੂਟ ਨਾਲ ਵਾਪਸ ਆਉਂਦਾ ਹੈ, ਆਮ ਤੌਰ 'ਤੇ ਅਜਿਹੀ ਰੱਖ-ਰਖਾਅ ਵਿੰਡੋ ਵਿੱਚ ਜਿਸ ਨੂੰ ਕੋਈ ਬਦਲਾਅ ਨਾਲ ਨਹੀਂ ਜੋੜਦਾ।
ਬਦਲੀ ਗਲਤ ਕਰਨ ਦੇ ਦੋ ਤਰੀਕੇ
ਪੂਲ ਦਾ ਅਨੁਵਾਦ ਸਰਵਰ ਦੇ LAN ਪਤੇ ਦੀ ਥਾਂ ਉਸ ਦੇ ਟਨਲ ਪਤੇ 'ਤੇ ਕਰਨ ਨਾਲ ਜਵਾਬ ਸਿੱਧੇ ਟਨਲ ਵਿੱਚ ਵਾਪਸ ਜਾਂਦੇ ਹਨ, ਜਿੱਥੇ ਉਹ ਉਸ ਕਲਾਇੰਟ ਵੱਲ ਰੂਟ ਹੁੰਦੇ ਹਨ ਜਿਸ ਨੇ ਕਦੇ ਮੰਗੇ ਹੀ ਨਹੀਂ। ਕਨੈਕਸ਼ਨ ਰਾਊਟਿੰਗ ਲੂਪ ਵਾਂਗ ਅਟਕ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਸੱਚਮੁੱਚ ਲੂਪ ਹੈ।
ਪੁਰਾਣੇ ਉੱਤੇ ਦੂਜਾ ਅਨੁਵਾਦ ਚੜ੍ਹਾਉਣਾ ਦੂਜੀ ਗਲਤੀ ਹੈ। ਪਹਿਲਾ ਮਿਲਦਾ ਨਿਯਮ ਜਿੱਤਦਾ ਹੈ, ਇਸ ਲਈ ਪੁਰਾਣੀ ਐਂਟਰੀ ਮਿਟਾਏ ਜਾਣ ਤੱਕ ਪੈਕੇਟ ਸੰਭਾਲਦੀ ਰਹਿੰਦੀ ਹੈ, ਅਤੇ ਨਵੇਂ ਨਿਯਮ ਦੇ ਕਾਊਂਟਰ ਸਿਫ਼ਰ 'ਤੇ ਰਹਿੰਦੇ ਹਨ, ਪਰ ਸਾਰੇ ਬਦਲੀ ਨੂੰ ਦੋਸ਼ ਦਿੰਦੇ ਹਨ। ਕੁਝ ਨਵਾਂ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ ਨਕਲ ਮਿਟਾਓ। ਫਿਰ ਸੂਚੀ ਇੱਕ ਵਾਰ ਹੋਰ ਪੜ੍ਹੋ ਅਤੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਪੂਲ ਨਾਲ ਠੀਕ ਇੱਕ ਹੀ ਅਨੁਵਾਦ ਮਿਲਦਾ ਹੈ।
ਜੇ ਟਨਲ IPv6 ਵੀ ਢੋਂਦੀ ਹੈ, ਤਾਂ ਪੂਰੀ ਸਮੀਖਿਆ ਦੂਜੇ ਸਟੈਕ 'ਤੇ ਦੁਹਰਾਓ। ਅਨੁਵਾਦ ਅਤੇ ਰੂਟ ਕੀਤੇ ਪ੍ਰੀਫਿਕਸ ਤੋਂ ਬਿਨਾਂ IPv6 ਡਿਫ਼ਾਲਟ ਰੂਟ ਵੀ ਓਨਾ ਹੀ ਚੁੱਪਚਾਪ ਫੇਲ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਇਸ ਨੂੰ ਭੁੱਲਣਾ ਸੌਖਾ ਹੈ ਕਿਉਂਕਿ ਇਸ ਦੇ ਉੱਤੇ ਸਭ ਕੁਝ ਇੱਕੋ ਜਿਹਾ ਦਿਖਦਾ ਹੈ।
ਆਉਣ ਵਾਲੀਆਂ ਸੇਵਾਵਾਂ ਨੂੰ ਉਲਟਾ ਅਨੁਵਾਦ ਚਾਹੀਦਾ ਹੈ
VPN ਕਲਾਇੰਟ 'ਤੇ ਸਥਿਤ ਸੇਵਾ ਜੋ ਬਾਹਰੋਂ ਪਹੁੰਚਯੋਗ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ, ਨੂੰ ਮੰਜ਼ਿਲ ਅਨੁਵਾਦ ਚਾਹੀਦਾ ਹੈ, ਸਰੋਤ ਅਨੁਵਾਦ ਨਹੀਂ: ਜਨਤਕ ਪੋਰਟ ਅੰਦਰ ਆਉਣ ਤੋਂ ਪਹਿਲਾਂ ਕਲਾਇੰਟ ਦੇ ਟਨਲ ਪਤੇ 'ਤੇ ਮੁੜ ਲਿਖਿਆ ਜਾਂਦਾ ਹੈ। ਫਿਰ ਫਾਰਵਰਡ ਰਾਹ ਨੂੰ ਉਸ ਟ੍ਰੈਫਿਕ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਵਾਲਾ ਸਪਸ਼ਟ ਨਿਯਮ ਚਾਹੀਦਾ ਹੈ।
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
ਟਨਲ ਆਪਣੇ ਆਪ ਨੂੰ ਢੋਣ ਵਾਲੇ ਪੋਰਟ ਦਾ ਕਦੇ ਅਨੁਵਾਦ ਨਾ ਕਰੋ, ਕਿਉਂਕਿ ਉਹ ਮੁੜ ਲਿਖਣਾ ਸੇਵਾ ਨੂੰ ਪਹੁੰਚਯੋਗ ਰੱਖਣ ਵਾਲਾ ਕਨੈਕਸ਼ਨ ਤੋੜਦਾ ਹੈ। ਟਨਲ ਪੋਰਟ ਨੂੰ ਮੰਜ਼ਿਲ ਨਿਯਮਾਂ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਾਹਰ ਰੱਖੋ। ਅੰਤ ਵਿੱਚ ਦੋਵੇਂ ਸਿਰਿਆਂ ਤੋਂ ਜਾਂਚੋ: ਨਵੇਂ ਨਿਯਮ 'ਤੇ ਕਾਊਂਟਰ, ਟਨਲ ਡਿਵਾਈਸ 'ਤੇ ਛੋਟਾ ਕੈਪਚਰ, ਅਤੇ ਜਨਤਕ ਪਤਾ ਅਜ਼ਮਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਟਨਲ ਦੇ ਅੰਦਰਲੇ ਪਤੇ 'ਤੇ ਇੱਕ ਬੇਨਤੀ।