SOCKS ಮಾತ್ರ ಮಾತನಾಡುವ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಸಾಮಾನ್ಯ VPN ನಲ್ಲಿ ಮಾತನಾಡಲು ಏನೂ ಇಲ್ಲ, ಏಕೆಂದರೆ ಸುರಂಗ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಸಾಗಿಸುತ್ತದೆ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಪ್ರಾಕ್ಸಿ ಎಂಡ್ಪಾಯಿಂಟ್ ಬೇಕು. ಪ್ರವೇಶದ ಮಾಲೀಕರು ಅನುಮತಿಸಿದಾಗ OpenSSH ಆ ಎಂಡ್ಪಾಯಿಂಟ್ ಒದಗಿಸಬಲ್ಲದು, ಏಕೆಂದರೆ ಕ್ರಿಯಾತ್ಮಕ ಫಾರ್ವರ್ಡಿಂಗ್ ಒಂದು SSH ಅವಧಿಯನ್ನು ಸ್ಥಳೀಯ ಪ್ರಾಕ್ಸಿಯಾಗಿ ಬದಲಿಸುತ್ತದೆ. ನಂತರ ಎರಡು ಹಾಪ್ಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಇಟ್ಟುಕೊಳ್ಳಬೇಕು: SSH ಹೋಸ್ಟ್ನ್ನು ತಲುಪುವ ಸುರಂಗ ಮತ್ತು ಆ ಹೋಸ್ಟ್ ಮುಂದೆ ತೆರೆಯುವ ಸಂಪರ್ಕ. ಅವುಗಳನ್ನು ಬೇರ್ಪಡಿಸುವುದು ಈ ವ್ಯವಸ್ಥೆ ಏಕೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದು ಎಂದಿಗೂ ಏನನ್ನು ಮಾಡುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತದೆ.

SSH ಶ್ರೋತೃ ಏನಾಗುತ್ತದೆ ಮತ್ತು ಏನಾಗುವುದಿಲ್ಲ

ಕ್ರಿಯಾತ್ಮಕ ಫಾರ್ವರ್ಡಿಂಗ್ SSH ಕ್ಲೈಂಟ್ನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಆಲಿಸಲು ಮತ್ತು ಸಂಪರ್ಕಿಸುವ ಎಲ್ಲದರೊಂದಿಗೆ SOCKS4 ಅಥವಾ SOCKS5 ಮಾತನಾಡಲು ಒತ್ತಾಯಿಸುತ್ತದೆ. ಪ್ರತಿ ವಿನಂತಿ ಒಂದು ಗಮ್ಯಸ್ಥಾನವನ್ನು ಹೆಸರಿಸುತ್ತದೆ ಮತ್ತು SSH ಸರ್ವರ್ ಮುಂದಿನ ಸಂಪರ್ಕವನ್ನು ತೆರೆಯುತ್ತದೆ, ಆದ್ದರಿಂದ ಗಮ್ಯಸ್ಥಾನದ ಹುಡುಕಾಟ ದೂರದ ಬದಿಯಲ್ಲಿ ನಡೆಯಬಹುದು. ಇದು ಅಪ್ಲಿಕೇಶನ್ ಮಟ್ಟದ TCP ಫಾರ್ವರ್ಡಿಂಗ್, ಇಡೀ ಸಾಧನಕ್ಕೆ VPN ಅಲ್ಲ. ಇದು ಯಾವುದೇ UDP ಸಂಯೋಜನೆ, ಯಾವುದೇ ICMP, ಮತ್ತು ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ನಿರ್ಲಕ್ಷಿಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಏನನ್ನೂ ಸಾಗಿಸುವುದಿಲ್ಲ. SSH ಸರ್ವರ್ನಿಂದ ಅಪ್ಲಿಕೇಶನ್ವರೆಗಿನ ಹಾಪ್ ಕೂಡ ನಿಮ್ಮ ಸುರಂಗದ ಒಳಗಿಲ್ಲ, ಗಮ್ಯಸ್ಥಾನವು ತಿಳಿದಿರುವ ನೆಟ್ವರ್ಕ್ಗಳಿಂದ ಮಾತ್ರ ಸಂಚಾರವನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ ಇದು ಮುಖ್ಯ.

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

ಸ್ಪಷ್ಟ ಪೋರ್ಟ್ನೊಂದಿಗೆ ಅದನ್ನು ಲೂಪ್ಬ್ಯಾಕ್ನಲ್ಲಿ ಪ್ರಾರಂಭಿಸಿ

ಬಳಸದ ಸ್ಥಳೀಯ ಪೋರ್ಟ್ ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ವಿಳಾಸವನ್ನು ಬಿಡುವ ಬದಲು ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಲೂಪ್ಬ್ಯಾಕ್ಗೆ ಬಂಧಿಸಿ. ಕೆಳಗಿನ ಮೂರು ಆಯ್ಕೆಗಳು ಪ್ರತಿಯೊಂದೂ ಒಂದು ಕಾರಣಕ್ಕಾಗಿ ಇವೆ.

ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
  [email protected]

-N ದೂರದ ಆದೇಶವನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ ಮತ್ತು -T ಸ್ಯೂಡೊ-ಟರ್ಮಿನಲ್ ಬಿಟ್ಟುಬಿಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಅವಧಿ ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ಮಾತ್ರ ಇರುತ್ತದೆ. ExitOnForwardFailure ಶ್ರೋತೃ ಸೃಷ್ಟಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದಾಗ ಕ್ಲೈಂಟ್ ನಿರ್ಗಮಿಸಲು ಬಿಡುತ್ತದೆ, ನೀವು ಕೇಳಿದ ಫಾರ್ವರ್ಡಿಂಗ್ ಇಲ್ಲದೆ ಓಡುವ ಬದಲು. ControlPath=none ಅವಧಿಯನ್ನು ತನ್ನದೇ ಫಾರ್ವರ್ಡಿಂಗ್ಗಳನ್ನು ಸೇರಿಸಬಹುದಾದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಮಲ್ಟಿಪ್ಲೆಕ್ಸ್ ಸಂಪರ್ಕದಿಂದ ಹೊರಗಿಡುತ್ತದೆ. ಲೂಪ್ಬ್ಯಾಕ್ ಶ್ರೋತೃವನ್ನು LAN ನಿಂದ ಹೊರಗಿಡುತ್ತದೆ, ಆದರೆ ಹಂಚಿದ ಯಂತ್ರದಲ್ಲಿ ಇದು ಅಧಿಕಾರದ ಗಡಿಯಲ್ಲ, ಏಕೆಂದರೆ ಇತರ ಸ್ಥಳೀಯ ಪ್ರಕ್ರಿಯೆಗಳೂ ಅದನ್ನು ತಲುಪಬಲ್ಲವು. OpenSSH ಕ್ಲೈಂಟ್ ಉಲ್ಲೇಖ ಈ ಎಲ್ಲಾ ಫ್ಲ್ಯಾಗ್ಗಳನ್ನು ದಾಖಲಿಸುತ್ತದೆ, ಮತ್ತು ಲೂಪ್ಬ್ಯಾಕ್ ಎಚ್ಚರಿಕೆ ಆಲಿಸುವ ಸಾಕೆಟ್ ಎಂದರೇನು ಎಂಬುದರಿಂದ ಬರುತ್ತದೆ.

ಹೆಸರುಗಳನ್ನು ಪ್ರಾಕ್ಸಿಯ ಮೂಲಕ ಕಳುಹಿಸಿ, ಅದರ ಸುತ್ತಲೂ ಅಲ್ಲ

SOCKS5 ಕ್ಲೈಂಟ್ ಗಮ್ಯಸ್ಥಾನವನ್ನು ತಾನೇ ಪರಿಹರಿಸಬಹುದು ಅಥವಾ ಪ್ರಾಕ್ಸಿಯನ್ನು ಕೇಳಬಹುದು, ಮತ್ತು ಈ ಆಯ್ಕೆ ಯಾವ ರಿಜಾಲ್ವರ್ ಉತ್ತರಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. socks5h ನೊಂದಿಗೆ curl ಹೋಸ್ಟ್ಹೆಸರನ್ನು ಪ್ರಾಕ್ಸಿಯ ಮೂಲಕ ಕಳುಹಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಹುಡುಕಾಟ SSH ಸರ್ವರ್ನಲ್ಲಿ ನಡೆಯುತ್ತದೆ. ಸಾಮಾನ್ಯ socks5 ನೊಂದಿಗೆ ಲ್ಯಾಪ್ಟಾಪ್ ಮೊದಲು ಪರಿಹರಿಸುತ್ತದೆ ಮತ್ತು ಸಂಪರ್ಕ ಮಾತ್ರ ಪ್ರಯಾಣಿಸುತ್ತದೆ, ಹೆಸರು ಒಳಗಿನದಾದಾಗ ಇದು ಉದ್ದೇಶವನ್ನು ಮೌನವಾಗಿ ಹಾಳುಮಾಡುತ್ತದೆ. ಕೆಳಗಿನ ವಿನಂತಿ ಪ್ರಾಕ್ಸಿ-ರಹಿತ ಪಟ್ಟಿಯನ್ನೂ ಖಾಲಿ ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಆನುವಂಶಿಕ NO_PROXY ಮೌಲ್ಯ ಅದನ್ನು ಪ್ರಾಕ್ಸಿಯ ಸುತ್ತಲೂ ಕರೆದೊಯ್ಯಲು ಸಾಧ್ಯವಿಲ್ಲ.

curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health

ಪ್ರಮಾಣಪತ್ರ ಪರಿಶೀಲನೆ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ವಂತ ಲಾಗಿನ್ ಇನ್ನೂ ಅನ್ವಯಿಸುತ್ತವೆ, ಏಕೆಂದರೆ ಪ್ರಾಕ್ಸಿ ಎರಡನ್ನೂ ಬದಲಿಸುವುದಿಲ್ಲ. ಎರಡು ಹುಡುಕಾಟಗಳು ಉಳಿಯುತ್ತವೆ: ಲ್ಯಾಪ್ಟಾಪ್ ಅನುಮತಿಸಿದ VPN ಮತ್ತು DNS ಮಾರ್ಗದ ಮೂಲಕ SSH ಹೋಸ್ಟ್ ತಲುಪಬೇಕು, ಮತ್ತು SSH ಸರ್ವರ್ ಅಪ್ಲಿಕೇಶನ್ ಹೆಸರನ್ನು ತಾನೇ ಪರಿಹರಿಸಬೇಕು. ಎರಡನೆಯದನ್ನು ಯಾವುದೇ ಸಂಚಾರ ಪ್ರಾಕ್ಸಿಯ ಮೂಲಕ ಹೋಗುವ ಮೊದಲು ಪ್ರತ್ಯೇಕವಾಗಿ ಪರೀಕ್ಷಿಸಬಹುದು.

ssh [email protected] getent hosts app.corp.example

ಒಂದು ಅನುಮತಿಸಿದ ಗಮ್ಯಸ್ಥಾನವನ್ನು ಸಾಬೀತುಪಡಿಸಿ, ನಂತರ ಅವಧಿಯನ್ನು ಮುಚ್ಚಿ

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

ಅವಧಿಯನ್ನು ಅದನ್ನು ಹೊಂದಿರುವ ಪ್ರಕ್ರಿಯೆಯ ಮೂಲಕ ನಿಲ್ಲಿಸಿ, ಸಂಬಂಧವಿಲ್ಲದ ಶೆಲ್ ಕೊಲ್ಲುವ ಮೂಲಕವಲ್ಲ. ನಂತರ ಶ್ರೋತೃ ಹೋಗಿದೆ ಎಂದು ದೃಢೀಕರಿಸಿ, ಏಕೆಂದರೆ ಇನ್ನೂ ಉತ್ತರಿಸುವ ಪೋರ್ಟ್ ನೀವು ನಿಜವಾಗಿ ಮುಚ್ಚದ ಅವಧಿ. ಈ ಅಭ್ಯಾಸ ತಂದ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಮಾತ್ರ ತೆಗೆದುಹಾಕಿ, ಅಪ್ಲಿಕೇಶನ್ ಸಂರಚನೆಯ ಉಳಿದ ಭಾಗವನ್ನು ಬಿಡಿ. ಫಾರ್ವರ್ಡಿಂಗ್ ನಿಯಮ ಹೊತ್ತಿರುವ ಮೇಲ್ವಿಚಾರಣೆ ಇಲ್ಲದ ಟರ್ಮಿನಲ್ ಸೇವೆ ಅಲ್ಲ, ಮತ್ತು ಶಾಶ್ವತ ಪ್ರಾಕ್ಸಿಗೆ ಅನುಮೋದಿತ ಜೀವನಚಕ್ರ ಬೇಕು, ಮರೆತ ವಿಂಡೋ ಅಲ್ಲ.

ss -ltn | grep 1080

ಈ ವ್ಯವಸ್ಥೆ ಸರಿಪಡಿಸಲಾಗದ ವೈಫಲ್ಯಗಳು

ಕೆಲವು ಲಕ್ಷಣಗಳು ಮೇಲಿನ ಮಿತಿಗಳನ್ನೇ ನೇರವಾಗಿ ಸೂಚಿಸುತ್ತವೆ, ಮತ್ತು ಅವನ್ನು ಬೇಗ ಗುರುತಿಸುವುದು ಪ್ರಾಕ್ಸಿ ಡೀಬಗ್ನ ಒಂದು ಮಧ್ಯಾಹ್ನವನ್ನು ಉಳಿಸುತ್ತದೆ. ಕೋಷ್ಟಕ ನೀವು ನೋಡುವುದನ್ನು ಅದು ಸಾಮಾನ್ಯವಾಗಿ ಅರ್ಥೈಸುವುದರೊಂದಿಗೆ ಜೋಡಿಸುತ್ತದೆ. ಕೊನೆಯ ಕಾಲಮ್ನಲ್ಲಿರುವ ಯಾವುದೂ ಸಂರಚನಾ ದೋಷವಲ್ಲ, ವಿನ್ಯಾಸದ ಪ್ರಶ್ನೆ.

What you seeWhat it usually meansWhere to look
The app connects and nothing followsIt ignores proxy settings entirelyIts own network settings, not the SSH session
A name resolution error for the destinationThe SSH server cannot resolve itServer resolver and search domains
A UDP-only application failsDynamic forwarding carries TCP onlyThis arrangement cannot serve it
curl works, the browser does notThe browser is not using the socks5h endpointBrowser proxy configuration
The listener answers after the session endedAnother process owns port 1080The ss output, then the owning process

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

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