ಕ್ಯಾರಿಯರ್ NAT ಹಿಂದಿನ ಲ್ಯಾಪ್ಟಾಪ್ ಕೂಡ ಸಹೋದ್ಯೋಗಿಗೆ ಸೇವೆ ನೀಡಬಲ್ಲದು, VPN ಸರ್ವರ್ ಭೇಟಿ ಸ್ಥಳವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಿದರೆ ಸಾಕು. ಅಲ್ಲಿಗೆ ತಲುಪಲು ಎರಡು ವಿಧಾನಗಳಿವೆ: ಕ್ಲೈಂಟ್ ಹೊರಕ್ಕೆ ಡಯಲ್ ಮಾಡಿ ಸರ್ವರ್ಗೆ ಕೇಳುವ ಪೋರ್ಟ್ ಇಟ್ಟುಕೊಳ್ಳಲು ಕೇಳುತ್ತದೆ, ಅಥವಾ ಸರ್ವರ್ ಪೋರ್ಟ್ ಪ್ರಕಟಿಸಿ ಅದನ್ನು ಟನೆಲ್ಗೆ ಅನುವಾದಿಸುತ್ತದೆ. ಎರಡೂ ಒಂದೇ ತಲುಪುವಿಕೆಯ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ ಮತ್ತು ವೈಫಲ್ಯ, ಮೇಲ್ವಿಚಾರಣೆ ಹಾಗೂ ಲಾಗಿಂಗ್ನಲ್ಲಿ ಬೇರೆ ರೀತಿ ವರ್ತಿಸುತ್ತವೆ. ನಿಮ್ಮ ಸೆಟಪ್ಗೆ ಯಾವುದು ಸರಿಹೊಂದುತ್ತದೆ ಎಂಬುದನ್ನು ಮೂರು ಷರತ್ತುಗಳು ನಿರ್ಧರಿಸುತ್ತವೆ.

ಎರಡು ಆಕಾರ, ಒಂದು ಭೇಟಿ ಸ್ಥಳ

ಮೊದಲ ಆಕಾರದಲ್ಲಿ ಕ್ಲೈಂಟ್ ಹೊರಕ್ಕೆ SSH ಸೆಶನ್ ತೆರೆದು ಸರ್ವರ್ಗೆ ಆಯ್ದ ಪೋರ್ಟ್ನಲ್ಲಿ ಕೇಳಲು ಹೇಳುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿ ಸಂಪರ್ಕವನ್ನು ಆ ಸೆಶನ್ ಮೂಲಕ ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಸರ್ವರ್ನಲ್ಲಿ ಏನೂ ಫಾರ್ವರ್ಡ್ ಆಗುವುದಿಲ್ಲ ಮತ್ತು ಪ್ಯಾಕೆಟ್ ಅನುವಾದ ನಡೆಯುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಏಕೈಕ ಅಗತ್ಯಗಳು SSH ಖಾತೆ, ಅನುಮತಿಸಿದ ಫಾರ್ವರ್ಡಿಂಗ್ ಮತ್ತು ಪೋರ್ಟ್ಗೆ ಫೈರ್ವಾಲ್ ನಿಯಮ. ಸೇವೆ ಕ್ಲೈಂಟ್ನಲ್ಲಿ ಲೂಪ್ಬ್ಯಾಕ್ಗೆ ಬದ್ಧವಾಗಿರುತ್ತದೆ, ಇದು ಸಾಮಾನ್ಯವಾಗಿ ನೀವು ಬಯಸುವುದೇ ಆಗಿದೆ.

ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]

ಎರಡನೇ ಆಕಾರದಲ್ಲಿ ಸಾರ್ವಜನಿಕ ಪೋರ್ಟ್ ಸರ್ವರ್ನದ್ದಾಗಿದ್ದು ಪ್ರತಿ ಸಂಪರ್ಕವನ್ನು ಕ್ಲೈಂಟ್ನ ಟನೆಲ್ ವಿಳಾಸದ ಕಡೆಗೆ ಮರುಬರೆಯುತ್ತದೆ. ಇದಕ್ಕೆ IP ಫಾರ್ವರ್ಡಿಂಗ್ ಸಕ್ರಿಯವಾಗಿರುವುದು, ಒಳಬರುವಾಗ ಗಮ್ಯಸ್ಥಾನ ಅನುವಾದ ಮತ್ತು ಹೊರಹೋಗುವಾಗ ಮೂಲ ಅನುವಾದ ಬೇಕು, ಮತ್ತು SSH ಸೆಶನ್ ಇಲ್ಲದಿದ್ದಾಗಲೂ ಇದು ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಪೋರ್ಟ್ ಸೆಶನ್ನದಲ್ಲ, ಸರ್ವರ್ನದ್ದು, ಮತ್ತು ಈ ಗುಣವೇ ಹೆಚ್ಚಿನ ನೈಜ ಪ್ರಕರಣಗಳನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ.

ಎರಡೂ ಆಕಾರಗಳಲ್ಲಿ ಯಾವುದೂ ರಚನೆಯಿಂದ ಹೆಚ್ಚು ಸುರಕ್ಷಿತವಲ್ಲ. ಎರಡೂ ಒಂದು ಸೇವಾ ಪೋರ್ಟ್ ಅನ್ನು ಸರ್ವರ್ನ ಸಾರ್ವಜನಿಕ ವಿಳಾಸವನ್ನು ತಲುಪಬಲ್ಲ ಎಲ್ಲರಿಗೂ ತೆರೆಯುತ್ತವೆ, ಮತ್ತು ಎರಡೂ ಇನ್ನೂ ಸೇವೆಯ ಸ್ವಂತ ದೃಢೀಕರಣವನ್ನು ಅವಲಂಬಿಸಿವೆ.

ಷರತ್ತು ಒಂದು: ಪೋರ್ಟ್ ಸೆಶನ್ಗಿಂತ ಹೆಚ್ಚು ಕಾಲ ಬದುಕಬೇಕೇ

ರಿವರ್ಸ್ ಫಾರ್ವರ್ಡಿಂಗ್ ಅದನ್ನು ರಚಿಸಿದ SSH ಸೆಶನ್ ಎಷ್ಟು ಕಾಲ ಇರುತ್ತದೆಯೋ ಅಷ್ಟೇ ಕಾಲ ಇರುತ್ತದೆ. ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಾಗ ಕೇಳುವವನು ಮಾಯವಾಗುತ್ತಾನೆ ಮತ್ತು ಸಹೋದ್ಯೋಗಿ ನಿಧಾನ ಮಾರ್ಗದ ಬದಲು ನಿರಾಕರಿಸಿದ ಸಂಪರ್ಕವನ್ನು ನೋಡುತ್ತಾನೆ. systemd ಯೂನಿಟ್ ಮತ್ತು ಮರುಪ್ರಾರಂಭ ನೀತಿಯೊಂದಿಗೆ ಆದೇಶದ ಮೇಲ್ವಿಚಾರಣೆ ಇದನ್ನು ಸರಿಪಡಿಸುತ್ತದೆ, ಮತ್ತು ExitOnForwardFailure=yes ವಿಫಲ ಬೈಂಡ್ ಅನ್ನು ತಕ್ಷಣ ಗೋಚರವಾಗಿಸುತ್ತದೆ, ಫಾರ್ವರ್ಡಿಂಗ್ ಇಲ್ಲದೆ ನಡೆಯುವ ಸೆಶನ್ ಬಿಡುವ ಬದಲು.

ಅನುವಾದಿತ ಪೋರ್ಟ್ ನಿಯಮಗಳು ಉಳಿಸಲ್ಪಟ್ಟರೆ ಮರುಪ್ರಾರಂಭಗಳನ್ನು ತಡೆದುಕೊಳ್ಳುತ್ತದೆ, ಆದರೆ ಕ್ಲೈಂಟ್ ಅದೇ ಟನೆಲ್ ವಿಳಾಸವನ್ನು ಇಟ್ಟುಕೊಳ್ಳುವುದನ್ನು ಅವಲಂಬಿಸಿದೆ. ಮರುಸಂಪರ್ಕದ ನಂತರ ಲ್ಯಾಪ್ಟಾಪ್ಗೆ ಬೇರೆ ವಿಳಾಸ ನೀಡುವ ಕ್ರಿಯಾತ್ಮಕ ಪೂಲ್ ನಿಯಮವನ್ನು ಸದ್ದಿಲ್ಲದೆ ಎಲ್ಲಿಗೂ ನಿರ್ದೇಶಿಸುತ್ತದೆ. ಮೊದಲು ಟನೆಲ್ ವಿಳಾಸವನ್ನು ಕಾಯ್ದಿರಿಸಿ, ನಂತರ ನಿಯಮ ಬರೆಯಿರಿ, ಮತ್ತು ಎರಡನ್ನೂ ಒಂದೇ ಬದಲಾವಣೆ ಎಂದು ಪರಿಗಣಿಸಿ.

ಸೇವೆ ರಾತ್ರಿ ಮೂರು ಗಂಟೆಗೆ ಯಾರೂ ನೋಡದೆ ಉತ್ತರಿಸಬೇಕಿದ್ದರೆ, ಸರ್ವರ್ ಪ್ರಕಟಿಸಿದ ಪೋರ್ಟ್ನ ಆಕಾರದಲ್ಲಿ ಕಡಿಮೆ ಚಲಿಸುವ ಭಾಗಗಳಿವೆ, ಏಕೆಂದರೆ ನಿಂತಿರಬೇಕಾದ ಏಕೈಕ ಪ್ರಕ್ರಿಯೆ ಟನೆಲ್ ಸ್ವತಃ.

ಷರತ್ತು ಎರಡು: ಫೈರ್ವಾಲ್ ಮತ್ತು ಲಾಗ್ಗಳು ಯಾರವು

ರಿವರ್ಸ್ ಆಕಾರ ಎಲ್ಲಾ ನೀತಿಯನ್ನು ಎರಡು ಸ್ಥಳಗಳಲ್ಲಿ ಇಡುತ್ತದೆ. sshd AllowTcpForwarding ಮೂಲಕ ದೂರದ ಫಾರ್ವರ್ಡಿಂಗ್ ಎಲ್ಲಾದರೂ ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಮತ್ತು GatewayPorts ಕೇಳುವವನು ಲೂಪ್ಬ್ಯಾಕ್ಗೆ ಬದ್ಧನಾಗುತ್ತಾನೆಯೇ ಅಥವಾ ಎಲ್ಲಾ ವಿಳಾಸಗಳಿಗೆ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಡೀಫಾಲ್ಟ್ no ಇದ್ದಾಗ ಸರ್ವರ್ನ ಹೊರಗಿನ ಸಹೋದ್ಯೋಗಿ ಫಾರ್ವರ್ಡಿಂಗ್ ಯಶಸ್ವಿಯಾದರೂ ಪೋರ್ಟ್ ತಲುಪಲಾರರು, ಮತ್ತು ಅದು ಮುರಿದ ಟನೆಲ್ನಂತೆ ಕಾಣುತ್ತದೆ, ವಾಸ್ತವದಲ್ಲಿ ಅದು ಬೈಂಡ್ ವಿಳಾಸ.

sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config

ಅನುವಾದಿತ ಆಕಾರಕ್ಕೆ ಫಾರ್ವರ್ಡಿಂಗ್ ಸಕ್ರಿಯ ಮತ್ತು ಎರಡು ನಿಯಮಗಳು ಬೇಕು, ಮತ್ತು ಎರಡನೇ ನಿಯಮವೇ ಹೆಚ್ಚಿನ ವಿಧಾನಗಳು ತಪ್ಪುವ ಸ್ಥಳ. ಮೂಲ ಅನುವಾದವನ್ನು conntrack ನ DNAT ಸ್ಥಿತಿಗೆ ಸೀಮಿತಗೊಳಿಸುವುದು ಎಂದರೆ ಗಮ್ಯಸ್ಥಾನ ನಿಯಮ ರಚಿಸಿದ ಸಂಪರ್ಕಗಳಷ್ಟೇ ಮರುಬರೆಯಲ್ಪಡುತ್ತವೆ, ಸರ್ವರ್ ಟನೆಲ್ಗೆ ಕಳುಹಿಸುವ ಪ್ರತಿ ಪ್ಯಾಕೆಟ್ ಅಲ್ಲ.

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1

ಆ ಮರುಬರವಣಿಗೆ ಆಪಾದನೆಯನ್ನೂ ನಾಶ ಮಾಡುತ್ತದೆ. ನಂತರ ಕ್ಲೈಂಟ್ ಪ್ರತಿ ಕರೆಮಾಡುವವನನ್ನು ಸರ್ವರ್ನ ಟನೆಲ್ ವಿಳಾಸವಾಗಿ ನೋಡುತ್ತದೆ, ಇದು ಪ್ರತಿ ವಿಳಾಸದ ದರ ಮಿತಿಯನ್ನು ಒಂದೇ ಬಕೆಟ್ಗೆ ಸೇರಿಸಿ ಯಾರು ಏನು ಕಳುಹಿಸಿದರು ಎಂಬುದನ್ನು ಮರೆಮಾಡುತ್ತದೆ. ಆಪಾದನೆ ಮುಖ್ಯವಾದರೆ ಸಂಪರ್ಕವನ್ನು ಸರ್ವರ್ನಲ್ಲಿ ಕೊನೆಗೊಳಿಸಿ ಅಥವಾ ಅನುಮತಿ ನಿರ್ಧಾರವನ್ನು ಅಲ್ಲೇ ಇಟ್ಟು ಸೇವೆ ನಂಬುವ ಹೆಡರ್ನಲ್ಲಿ ಗುರುತನ್ನು ರವಾನಿಸಿ. ಈ ಎರಡು ಸರಿಪಡಿಸುವಿಕೆಗಳ ನಡುವಿನ ಆಯ್ಕೆ ಸೇವೆ ಪ್ರಾಕ್ಸಿ ಹೆಡರ್ ಓದುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ಅವಲಂಬಿಸಿದೆ.

ಷರತ್ತು ಮೂರು: ಒಂದು ಪೋರ್ಟ್ ಅಥವಾ ಅನೇಕ, ಮತ್ತು ಹೆಸರು ಯಾರದು

ಒಂದು ಪೋರ್ಟ್ನಲ್ಲಿ ಒಂದು ಸೇವೆ ಎಂಬುದು ಶ್ರಮದಲ್ಲಿ ರಿವರ್ಸ್ ಫಾರ್ವರ್ಡಿಂಗ್ ಗೆಲ್ಲುವ ಸಂದರ್ಭ. ಒಂದು ಆದೇಶ, ಒಂದು ಖಾತೆ ಮತ್ತು ಒಂದು ಫೈರ್ವಾಲ್ ನಿಯಮ ಬೇಕು, ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸುವುದು ಎಂದರೆ ಸೆಶನ್ ಕೊಲ್ಲುವುದು. ಒಂದೇ ಸಾರ್ವಜನಿಕ ವಿಳಾಸದಲ್ಲಿ ಅನೇಕ ಸೇವೆಗಳು ನಿಮ್ಮನ್ನು ಸರ್ವರ್ ಪ್ರಕಟಿಸಿದ ಆಕಾರದ ಕಡೆಗೆ ತಳ್ಳುತ್ತವೆ, ಏಕೆಂದರೆ ಪ್ರತಿ ರಿವರ್ಸ್ ಫಾರ್ವರ್ಡಿಂಗ್ಗೆ ತನ್ನದೇ ಸರ್ವರ್ ಪೋರ್ಟ್ ಬೇಕು ಮತ್ತು ಪ್ರತಿ ಸೇವೆಯೊಂದಿಗೆ ಗುಂಪು ಬೆಳೆಯುತ್ತದೆ.

ಹೆಸರುಗಳು ಇದನ್ನು ಇನ್ನಷ್ಟು ಸಂಕೀರ್ಣಗೊಳಿಸುತ್ತವೆ. ರಿವರ್ಸ್ ಫಾರ್ವರ್ಡಿಂಗ್ SNI ಪ್ರಕಾರ ರೂಟ್ ಮಾಡುವ TCP ಪ್ರಾಕ್ಸಿಯ ಹಿಂದೆ ಇರಬಹುದು, ಆದರೆ ಅನುವಾದಿತ ಪೋರ್ಟ್ ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರತಿ ಸೇವೆಗೆ ಒಂದು ಪೋರ್ಟ್. ಸೇವೆ ಸ್ವತಃ TLS ಮುಗಿಸಿ ಮೂಲ ಹೋಸ್ಟ್ಹೆಸರು ಬೇಕಾದರೆ, ಪ್ರಾಕ್ಸಿ ವಿಧಾನ ಅದನ್ನು ಉಳಿಸುತ್ತದೆ, DNAT ವಿಧಾನ ಸೇವೆ ಆ ಪೋರ್ಟ್ನಲ್ಲಿ ಆ ಹೆಸರನ್ನು ಸ್ವೀಕರಿಸಿದರೆ ಮಾತ್ರ ಉಳಿಸುತ್ತದೆ.

ಮೂರು ಷರತ್ತುಗಳಲ್ಲಿ ಯಾವುದು ಆಕಾರವನ್ನು ನಿರ್ಧರಿಸಿತು ಎಂದು ಬರೆಯಿರಿ. ಇಲ್ಲದಿದ್ದರೆ ಎರಡನೇ ಸೇವೆ ಸೇರಿಸುವ ಮುಂದಿನ ವ್ಯಕ್ತಿ ಕಡಿಮೆ ಸಂದರ್ಭದೊಂದಿಗೆ ಅದೇ ಹೋಲಿಕೆಯನ್ನು ಮತ್ತೆ ತೆರೆಯುತ್ತಾನೆ.

ನಿರ್ಧರಿಸಿ, ನಂತರ ಹೊರಗಿನಿಂದ ಪರೀಕ್ಷಿಸಿ

ಲ್ಯಾಪ್ಟಾಪ್ಗೆ ಯಾವುದೇ ಮಾರ್ಗವಿಲ್ಲದ ನೆಟ್ವರ್ಕ್ನಿಂದ ಮಾರ್ಗವನ್ನು ಪರೀಕ್ಷಿಸಿ, ಮತ್ತು ವಿನಂತಿ ನಡೆಯುತ್ತಿರುವಾಗ ಸರ್ವರ್ನ ಕೌಂಟರ್ಗಳನ್ನು ಗಮನಿಸಿ. ಸರ್ವರ್ನಿಂದ ಅದರದೇ ಸಾರ್ವಜನಿಕ ವಿಳಾಸದ ಕಡೆಗೆ ಪರೀಕ್ಷಿಸುವುದು ಇಲ್ಲಿ ಏನನ್ನೂ ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಪ್ಯಾಕೆಟ್ ಸ್ಥಳೀಯವಾಗಿ ರಚನೆಯಾಗುತ್ತದೆ ಮತ್ತು ಒಳಬರುವ ಅನುವಾದ ಹುಕ್ ಅನ್ನು ಎಂದಿಗೂ ತಲುಪುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಪರೀಕ್ಷೆ ಉತ್ತೀರ್ಣವಾಗಬಹುದು ಆದರೆ ನಿಜವಾದ ಮಾರ್ಗ ಮುರಿದಿರಬಹುದು.

sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20

ಸ್ಥಿರವಾಗಿ ಉಳಿಯುವ ಕೌಂಟರ್ಗಳೆಂದರೆ ಪ್ಯಾಕೆಟ್ ಎಂದಿಗೂ ನಿಯಮವನ್ನು ತಲುಪಲಿಲ್ಲ ಎಂದರ್ಥ, ಇದು ಪೂರೈಕೆದಾರರು ಅಥವಾ ಹೋಸ್ಟ್ ಫೈರ್ವಾಲ್ನತ್ತ ಸೂಚಿಸುತ್ತದೆ. ಸೇವೆ ನಿರಾಕರಿಸುತ್ತಿರುವಾಗ ಚಲಿಸುವ ಕೌಂಟರ್ಗಳು ಕ್ಲೈಂಟ್ನ ಸ್ವಂತ ಫೈರ್ವಾಲ್ ಅಥವಾ ಸೇವೆ ಕೇಳುವ ವಿಳಾಸದತ್ತ ಸೂಚಿಸುತ್ತವೆ. ಪ್ಯಾಕೆಟ್ ಸಾಗಿಸಿ ಏನನ್ನೂ ಹಿಂತಿರುಗಿಸದ ಟನೆಲ್ ಮಾರ್ಗ ಅಥವಾ ರಿವರ್ಸ್-ಪಾತ್ ಸಮಸ್ಯೆ, ಮತ್ತು ಈ ಮೂರು ಫಲಿತಾಂಶಗಳಲ್ಲಿ ಯಾವುದನ್ನೂ ಕ್ಲೈಂಟ್ ಅಡಾಪ್ಟರ್ ಸಂಪಾದಿಸಿ ಡೀಬಗ್ ಮಾಡಬಾರದು. ಏನನ್ನಾದರೂ ಬದಲಿಸುವ ಮೊದಲು ಯಾವ ಕೌಂಟರ್ ಚಲಿಸಿತು ಎಂದು ಬರೆಯಿರಿ, ಏಕೆಂದರೆ ಮುಂದಿನ ಪರೀಕ್ಷೆಗೆ ಆ ಮೂಲ ರೇಖೆ ಬೇಕು.

ಆಕಾರ ಕೆಲಸ ಮಾಡಿದ ನಂತರ ಪೋರ್ಟ್, ಮಾಲೀಕ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣಾ ವಿಧಾನವನ್ನು ಟನೆಲ್ ಸಂರಚನೆಯ ಪಕ್ಕದಲ್ಲಿ ದಾಖಲಿಸಿ. ಕೇವಲ ಯಾರೋ ಒಬ್ಬರ ಶೆಲ್ ಇತಿಹಾಸದಲ್ಲಿ ಮಾತ್ರ ಇರುವ ತಲುಪುವಿಕೆ ಸರಿಪಡಿಸುವಿಕೆ ಒಂದು ಮರುಪ್ರಾರಂಭದಷ್ಟು ದೂರದಲ್ಲಿ ಪುನರಾವರ್ತಿತ ಘಟನೆ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು