NAT ਪਿੱਛੇ WireGuard ਪੀਅਰ ਤੱਕ ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ: DNAT ਅਤੇ SNAT
DNAT ਬੇਨਤੀ ਪਹੁੰਚਾ ਦਿੰਦਾ ਹੈ, ਪਰ ਜਵਾਬ ਗ਼ਲਤ ਪਤੇ ਤੋਂ ਨਿਕਲਦਾ ਹੈ। ਮਿਲਦਾ SNAT ਨਿਯਮ ਜੋੜੋ ਅਤੇ ਟਨਲ ਕਨਫਿਗਰ ਹੋਣ ਤੋਂ ਬਾਅਦ ਦੋਵੇਂ ਰੱਖੋ।
ਇੱਕ ਬ੍ਰਾਊਜ਼ਰ https://203.0.113.10:8443 ਦੀ ਬੇਨਤੀ ਕਰਦਾ ਹੈ, ਪ੍ਰੌਕਸੀ ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕਰਦੀ ਹੈ, ਅਤੇ WireGuard ਪੀਅਰ ਉੱਤੇ ਸੇਵਾ ਕਦੇ ਜਵਾਬ ਨਹੀਂ ਦਿੰਦੀ। DNAT ਨਿਯਮ ਆਪਣਾ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ; ਫੇਲ੍ਹ ਹੋਣ ਵਾਲਾ ਹਿੱਸਾ ਜਵਾਬ ਹੈ। ਪੈਕੇਟ ਨੂੰ ਦੋਵੇਂ ਅਨੁਵਾਦਾਂ ਵਿੱਚੋਂ ਲੰਘਾਓ ਅਤੇ ਗ਼ੈਰਹਾਜ਼ਰ ਨਿਯਮ ਸਪਸ਼ਟ ਹੋ ਜਾਂਦਾ ਹੈ। ਹੱਲ ਸਹੀ ਹੁੱਕ ਵਿੱਚ ਇੱਕ ਹੋਰ NAT ਬਿਆਨ ਹੈ, ਨਵੀਂ ਟਨਲ ਨਹੀਂ।
ਇੱਕ ਬੇਨਤੀ ਨੂੰ ਸ਼ੁਰੂ ਤੋਂ ਅੰਤ ਤੱਕ ਵੇਖੋ
ਬੇਨਤੀ ਪ੍ਰੌਕਸੀ ਦੇ ਜਨਤਕ ਇੰਟਰਫ਼ੇਸ ਉੱਤੇ ਪਹੁੰਚਦੀ ਹੈ, ਸਰੋਤ ਕਲਾਇੰਟ ਦਾ ਜਨਤਕ ਪਤਾ ਅਤੇ ਮੰਜ਼ਿਲ ਪ੍ਰੌਕਸੀ ਦਾ ਪਤਾ ਹੁੰਦਾ ਹੈ। nat PREROUTING ਵਿੱਚ DNAT ਨਿਯਮ ਮੰਜ਼ਿਲ ਨੂੰ ਪੀਅਰ ਦੇ ਟਨਲ ਪਤੇ 10.90.0.2 ਉੱਤੇ ਮੁੜ ਲਿਖਦਾ ਹੈ। ਫਿਰ ਰੂਟਿੰਗ ਫ਼ੈਸਲਾ ਪੈਕੇਟ ਨੂੰ wg0 ਰਾਹੀਂ ਬਾਹਰ ਭੇਜਦਾ ਹੈ, ਅਤੇ ਫਾਰਵਰਡ ਮਾਰਗ ਪੂਰਾ ਹੋ ਜਾਂਦਾ ਹੈ।
ਪੀਅਰ ਉੱਤੇ ਪੈਕੇਟ ਹੁਣ ਮੂਲ ਜਨਤਕ ਸਰੋਤ ਪਤਾ ਢੋਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਕਿਸੇ ਨੇ ਇਸਨੂੰ ਮੁੜ ਨਹੀਂ ਲਿਖਿਆ। ਸੇਵਾ ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕਰਦੀ ਹੈ ਅਤੇ ਆਪਣਾ ਜਵਾਬ ਆਪਣੇ ਡਿਫ਼ੌਲਟ ਗੇਟਵੇ ਨੂੰ ਭੇਜਦੀ ਹੈ, ਜੋ ਪੀਅਰ ਦੇ ਸਾਹਮਣੇ ਵਾਲਾ ਘਰੇਲੂ ਰਾਊਟਰ ਹੈ। ਉਸ ਰਾਊਟਰ ਕੋਲ ਉਸ ਪ੍ਰਵਾਹ ਲਈ ਕੋਈ ਸਥਿਤੀ ਨਹੀਂ ਜੋ ਉਸ ਨੇ ਕਦੇ ਨਹੀਂ ਵੇਖਿਆ, ਇਸ ਲਈ ਉਹ ਪੈਕੇਟ ਸੁੱਟ ਦਿੰਦਾ ਹੈ ਜਾਂ ਆਪਣੇ ਜਨਤਕ ਪਤੇ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਲਾਇੰਟ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰੇਗਾ।
ਅਸਮਾਨਤਾ ਹੀ ਸਾਰੀ ਸਮੱਸਿਆ ਹੈ: ਬੇਨਤੀ ਪ੍ਰੌਕਸੀ ਵਿੱਚੋਂ ਜਾਂਦੀ ਹੈ, ਅਤੇ ਜਵਾਬ ਸਿੱਧਾ ਜਾਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ। ਪ੍ਰੌਕਸੀ ਦੀ ਕਨੈਕਸ਼ਨ ਟਰੈਕਿੰਗ ਸਿਰਫ਼ ਤਦ ਮਦਦ ਕਰਦੀ ਹੈ ਜਦੋਂ ਜਵਾਬ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਵਾਪਸ ਆਉਂਦਾ ਹੈ, ਅਤੇ ਜਦ ਤੱਕ ਸਰੋਤ ਪਤਾ ਮੂਲ ਕਲਾਇੰਟ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ, ਉਹ ਉੱਥੇ ਵਾਪਸ ਨਹੀਂ ਆ ਸਕਦਾ।
ਵਾਪਸੀ ਅਨੁਵਾਦ ਜੋੜੋ
ਫਾਰਵਰਡ ਹੋਣ ਵਾਲੇ ਪ੍ਰਵਾਹ ਦਾ ਸਰੋਤ ਪੀਅਰ ਵੱਲ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰੌਕਸੀ ਦੇ ਟਨਲ ਪਤੇ ਉੱਤੇ ਮੁੜ ਲਿਖੋ। ਫਿਰ ਸੇਵਾ 10.90.0.1 ਨੂੰ ਜਵਾਬ ਦਿੰਦੀ ਹੈ, ਪ੍ਰੌਕਸੀ ਇਸਨੂੰ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ, ਅਤੇ ਪੈਕੇਟ ਦੇ ਕਲਾਇੰਟ ਕੋਲ ਵਾਪਸ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਕਨੈਕਸ਼ਨ ਟਰੈਕਿੰਗ ਦੋਵੇਂ ਅਨੁਵਾਦ ਉਲਟ ਦਿੰਦੀ ਹੈ।
iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1POSTROUTING ਨਿਯਮ ਜਾਣ-ਬੁੱਝ ਕੇ ਤੰਗ ਹੈ: ਇਹ ਅਨੁਵਾਦਿਤ ਮੰਜ਼ਿਲ ਅਤੇ ਟਨਲ ਇੰਟਰਫ਼ੇਸ ਨਾਲ ਮਿਲਦਾ ਹੈ, ਇਸ ਲਈ wg0 ਰਾਹੀਂ ਸੰਜੋਗ ਨਾਲ ਨਿਕਲਣ ਵਾਲੀ ਅਸੰਬੰਧਿਤ ਟਰੈਫ਼ਿਕ ਮੁੜ ਨਹੀਂ ਲਿਖਦਾ। ਇੱਕ ਚੌੜਾ masquerade ਨਿਯਮ ਵੀ ਕਲਾਇੰਟ ਦਾ ਪਤਾ ਲੁਕਾਉਂਦਾ, ਪਰ ਇਹ ਹਰ ਪ੍ਰਵਾਹ ਲਈ ਅਜਿਹਾ ਕਰਦਾ ਅਤੇ NAT ਟੇਬਲ ਦੀ ਜਾਂਚ ਔਖੀ ਬਣਾ ਦਿੰਦਾ।
ਨਿਯਮ ਉੱਥੇ ਰੱਖੋ ਜਿੱਥੇ ਟਨਲ ਮੌਜੂਦ ਹੈ
ਉਹ ਨਿਯਮ ਜੋ ਟਨਲ ਪਤੇ ਜਾਂ ਇੰਟਰਫ਼ੇਸ ਦਾ ਹਵਾਲਾ ਦਿੰਦੇ ਹਨ, wg-quick ਵੱਲੋਂ ਇਸਨੂੰ ਕਨਫਿਗਰ ਕਰਨ ਤੋਂ ਬਾਅਦ ਚੱਲਣੇ ਚਾਹੀਦੇ ਹਨ। ਇੰਟਰਫ਼ੇਸ PreUp ਤੋਂ ਪਹਿਲਾਂ ਬਣਦਾ ਹੈ, ਪਰ ਪਤੇ, MTU, DNS ਅਤੇ ਰੂਟ ਬਾਅਦ ਵਿੱਚ ਲਾਗੂ ਹੁੰਦੇ ਹਨ, ਅਤੇ PostUp ਤਦ ਚੱਲਦਾ ਹੈ ਜਦੋਂ ਇਹ ਸਭ ਆਪਣੀ ਥਾਂ ’ਤੇ ਹੋਵੇ। ਜੋੜ PostUp ਵਿੱਚ ਅਤੇ ਹਟਾਉਣੇ PreDown ਵਿੱਚ ਰੱਖੋ।
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1ਹਟਾਉਣੇ ਜੋੜਾਂ ਨਾਲ ਟੋਕਨ ਦਰ ਟੋਕਨ ਮਿਲਣੇ ਚਾਹੀਦੇ ਹਨ, multiport ਅਤੇ ਇੰਟਰਫ਼ੇਸ ਮਿਲਾਨਾਂ ਸਮੇਤ। ਇੱਕ ਮਿਲਾਨ ਵਿੱਚ ਵੱਖਰਾ ਹਟਾਉਣਾ ਕੁਝ ਵੀ ਨਹੀਂ ਹਟਾਉਂਦਾ, ਅਤੇ ਅਗਲਾ ਮੁੜ-ਕਨੈਕਸ਼ਨ ਨਿਯਮ ਦੀ ਦੂਜੀ ਕਾਪੀ ਜੋੜ ਦਿੰਦਾ ਹੈ। ਕੁਝ ਮੁੜ-ਕਨੈਕਸ਼ਨਾਂ ਤੋਂ ਬਾਅਦ ਟੇਬਲ ਵਿੱਚ ਅਜਿਹੀਆਂ ਨਕਲਾਂ ਹੁੰਦੀਆਂ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ ਕਨਫਿਗਰੇਸ਼ਨ ਲਾਈਨ ਨਾਲ ਜੋੜਨਾ ਔਖਾ ਹੈ।
ਨਤੀਜਾ iptables -t nat -S ਨਾਲ ਮੁੜ-ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਾਅਦ ਜਾਂਚੋ। ਜੇ ਉਹੀ ਨਿਯਮ ਦੋ ਵਾਰ ਦਿਸੇ, ਤਾਂ PreDown ਲਾਈਨ ਨਹੀਂ ਮਿਲਦੀ ਅਤੇ ਸਫ਼ਾਈ ਚੁੱਪਚਾਪ ਫੇਲ੍ਹ ਹੁੰਦੀ ਹੈ।
ਫਾਰਵਰਡਿੰਗ, ਫਿਲਟਰਿੰਗ ਅਤੇ ਦੂਜਾ NAT
IPv4 ਫਾਰਵਰਡਿੰਗ ਸਥਾਈ ਤੌਰ ’ਤੇ ਚਾਲੂ ਕਰੋ, ਫਿਰ ਫਿਲਟਰ ਟੇਬਲ ਵਿੱਚ ਫਾਰਵਰਡ ਹੋਣ ਵਾਲੇ ਪ੍ਰਵਾਹ ਨੂੰ ਮਨਜ਼ੂਰੀ ਦਿਓ। DNAT FORWARD ਚੇਨ ਤੋਂ ਪਹਿਲਾਂ ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਫਿਲਟਰ ਨਿਯਮ ਜਨਤਕ ਪਤੇ ਨਾਲ ਨਹੀਂ, ਅਨੁਵਾਦਿਤ ਮੰਜ਼ਿਲ ਨਾਲ ਮਿਲਦਾ ਹੈ। ਜੇ UFW ਫਾਇਰਵਾਲ ਸੰਭਾਲਦਾ ਹੈ, ਤਾਂ ਮਨਜ਼ੂਰੀ ਨੂੰ ਰੂਟ ਨਿਯਮ ਵਜੋਂ ਦੱਸੋ; ਸਾਧਾਰਨ ਹੋਸਟ ਨਿਯਮ ਫਾਰਵਰਡ ਹੋਣ ਵਾਲੀ ਟਰੈਫ਼ਿਕ ਨੂੰ ਨਹੀਂ ਢਕਦਾ।
ਪ੍ਰੌਕਸੀ ਦੇ ਨਿਯਮ ਸਹੀ ਹੋਣ ’ਤੇ ਵੀ ਦੋ ਹੋਰ NAT ਪਰਤਾਂ ਮਾਰਗ ਤੋੜ ਸਕਦੀਆਂ ਹਨ। ਘਰੇਲੂ ਕਨੈਕਸ਼ਨ ਉੱਤੇ ਜਨਤਕ ਪਤਾ ਰਾਊਟਰ ਦਾ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਉਸ ਦੇ ਫਾਇਰਵਾਲ ਵਿੱਚ ਪੋਰਟ ਖੋਲ੍ਹਣਾ ਉਸ ਪੋਰਟ ਨੂੰ ਪ੍ਰੌਕਸੀ ਤੱਕ ਭੇਜਣ ਵਾਲੀ ਪੋਰਟ-ਫਾਰਵਰਡ ਐਂਟਰੀ ਬਣਾਉਣ ਦੇ ਬਰਾਬਰ ਨਹੀਂ। ਬਾਹਰੋਂ ਖੁੱਲ੍ਹਾ ਦਿਸਦਾ ਪਰ ਕੁਝ ਵੀ ਜਵਾਬ ਨਾ ਦੇਣ ਵਾਲਾ ਪੋਰਟ ਅਕਸਰ ਉਹੀ ਮੈਪਿੰਗ ਨਹੀਂ ਰੱਖਦਾ।
NAT VPS ਉੱਤੇ ਪ੍ਰਦਾਤਾ ਜਨਤਕ ਪੋਰਟ ਨੂੰ ਨਿੱਜੀ ਪਤੇ ’ਤੇ ਮੈਪ ਕਰਦਾ ਹੈ। ਮੈਪਿੰਗ ਤੁਹਾਡੇ ਐਲਾਨੇ ਪੋਰਟ ਨਾਲ ਮਿਲਣੀ ਚਾਹੀਦੀ ਹੈ, ਅਤੇ ਅਸੰਗਤੀ ਟੁੱਟੀ ਟਨਲ ਵਾਂਗ ਹੀ ਦਿਸਦੀ ਹੈ। WireGuard ਕਨਫਿਗਰੇਸ਼ਨ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰਦਾਤਾ ਦੀ ਮੈਪਿੰਗ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।
ਵਾਪਸੀ ਮਾਰਗ ਜਾਂਚੋ ਅਤੇ ਖ਼ਰਚਾ ਸਵੀਕਾਰ ਕਰੋ
ਪ੍ਰੌਕਸੀ ਦੇ LAN ਤੋਂ ਇਲਾਵਾ ਕਿਸੇ ਨੈੱਟਵਰਕ ਤੋਂ ਕਨੈਕਟ ਕਰੋ, ਫਿਰ ਕਨੈਕਸ਼ਨ ਖੁੱਲ੍ਹਾ ਹੋਣ ਵੇਲੇ ਅਨੁਵਾਦ ਜੋੜੀ ਦੀ ਜਾਂਚ ਕਰੋ:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080conntrack ਐਂਟਰੀ ਵਿੱਚ ਮੂਲ tuple, ਅਨੁਵਾਦਿਤ tuple ਅਤੇ ਜਵਾਬ ਦੀ ਦਿਸ਼ਾ ਦਿਸਣੀ ਚਾਹੀਦੀ ਹੈ। ਜੇ ਜਵਾਬ ਨਹੀਂ ਹੈ, ਤਾਂ ਪੀਅਰ ਟਨਲ ਰਾਹੀਂ ਨਹੀਂ ਭੇਜ ਰਿਹਾ, ਜਿਸ ਦਾ ਆਮ ਅਰਥ ਹੈ ਕਿ SNAT ਨਿਯਮ ਲਾਗੂ ਨਹੀਂ ਹੋਇਆ ਜਾਂ ਪੀਅਰ ਦੇ ਆਪਣੇ ਫਾਇਰਵਾਲ ਨੇ ਪ੍ਰਵਾਹ ਸੁੱਟ ਦਿੱਤਾ।
PostUp ਨਿਯਮ ਮੁੜ ਲਾਗੂ ਕਰਦਾ ਹੈ ਇਹ ਸਾਬਤ ਕਰਨ ਲਈ ਇੱਕ ਵਾਰ ਰੀਬੂਟ ਕਰੋ, ਫਿਰ ਟਨਲ ਰੋਕੋ ਅਤੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ PreDown ਨੇ ਉਹ ਹਟਾ ਦਿੱਤੇ। ਡਿਸਕਨੈਕਟ ਤੋਂ ਬਾਅਦ ਬਚੇ ਮੁਰਦਾ ਨਿਯਮ ਹੀ ਇਸ ਗੱਲ ਦਾ ਕਾਰਨ ਹਨ ਕਿ ਬਾਅਦ ਵਾਲੀ ਤਬਦੀਲੀ ਅਣਕਿਆਸੀ ਵਿਵਹਾਰ ਕਰਦੀ ਹੈ।
ਅੰਤ ਵਿੱਚ, SNAT ਦਾ ਖ਼ਰਚਾ ਸਵੀਕਾਰ ਕਰੋ। ਸੇਵਾ ਹਰ ਬੇਨਤੀ ਨੂੰ ਪ੍ਰੌਕਸੀ ਤੋਂ ਆਇਆ ਵੇਖਦੀ ਹੈ, ਇਸ ਲਈ ਪਹੁੰਚ ਲੌਗ, ਪ੍ਰਤੀ-ਕਲਾਇੰਟ ਦਰ ਸੀਮਾਵਾਂ ਅਤੇ ਮਨਜ਼ੂਰ ਪਤਾ ਸੂਚੀਆਂ ਹੁਣ ਵਰਤੋਂਕਾਰਾਂ ਵਿੱਚ ਫ਼ਰਕ ਨਹੀਂ ਕਰਦੀਆਂ। ਹੇਅਰਪਿਨ ਮਾਮਲੇ ਨੂੰ ਪ੍ਰੌਕਸੀ ਦੇ LAN ’ਤੇ ਕਲਾਇੰਟਾਂ ਲਈ ਆਪਣਾ ਸਰੋਤ ਅਨੁਵਾਦ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਪੀਅਰ ਨੂੰ ਅਸਲੀ ਕਲਾਇੰਟ ਪਤੇ ਚਾਹੀਦੇ ਹਨ, ਤਾਂ ਬਦਲ ਕਲਾਇੰਟ ਨੈੱਟਵਰਕ ਵੱਲ ਵਾਪਸੀ ਰੂਟ ਹੈ, ਜੋ ਵੱਧ ਕੰਮ ਹੈ ਪਰ ਜਾਣਕਾਰੀ ਬਚਾਉਂਦਾ ਹੈ।