ಯಾವುದೇ ಪ್ಲಾಟ್ಫಾರ್ಮ್ನಲ್ಲಿ ಕೋಡ್ನಿಂದ ಸಕ್ರಿಯ VPN ಸುರಂಗವನ್ನು ಪತ್ತೆ ಮಾಡುವುದು ಹೇಗೆ
ಸುರಂಗ ಇದೆಯೇ, ಈ ಗಮ್ಯಸ್ಥಾನ ಅದರ ಮೂಲಕ ಹೋಗುತ್ತದೆಯೇ, ಅಥವಾ ದೂರದ ತುದಿ ಉತ್ತರಿಸುತ್ತದೆಯೇ? ಇವು ಮೂರು ವಿಭಿನ್ನ ಪರಿಶೀಲನೆಗಳು ಮತ್ತು ಮೂರು ವಿಭಿನ್ನ ಸಂಕೇತಗಳು.
“VPN ಆನ್ ಆಗಿದೆಯೇ?” ವಾಸ್ತವವಾಗಿ ಒಂದೇ ವಾಕ್ಯದಲ್ಲಿ ಮೂರು ಪ್ರಶ್ನೆಗಳು। ನಿಮ್ಮ ಕೋಡ್ಗೆ ಅವುಗಳಲ್ಲಿ ಯಾವುದು ಬೇಕು ಎಂಬುದು ಮೊದಲ ನಿರ್ಧಾರ, ಮತ್ತು ಬಹುಪಾಲು ಅನುಷ್ಠಾನಗಳು ಅದನ್ನೇ ಬಿಟ್ಟುಬಿಡುತ್ತವೆ। ಈ ಸಾಧನದಲ್ಲಿ ಸುರಂಗ ಇದೆಯೇ, ಈ ಗಮ್ಯಸ್ಥಾನದ ಸಂಚಾರ ಅದರ ಮೂಲಕ ಹೊರಡುತ್ತದೆಯೇ, ಅಥವಾ ದೂರದ ತುದಿ ನೀವು ನಿರೀಕ್ಷಿಸುವ ಗುರುತಿನೊಂದಿಗೆ ಉತ್ತರಿಸುತ್ತದೆಯೇ। ಗುಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ, ನಂತರ ಅದನ್ನು ಅಳೆಯುವ ಸಂಕೇತವನ್ನು ಆಯ್ಕೆಮಾಡಿ, ಕೊನೆಯಲ್ಲಿ ನೀವು ವಾಸ್ತವವಾಗಿ ಯಾವುದನ್ನು ಅಳೆದಿರಿ ಎಂದು ಲಾಗ್ನಲ್ಲಿ ಬರೆಯಿರಿ।
ಮೂರು ಗುಣಗಳು, ಮೂರು ಸಂಕೇತಗಳು
ಪ್ರತಿಯೊಂದನ್ನು ಒಂದು ಸಾಲಿಗೆ ಸಂಕೋಚಿಸಿದಾಗ, ಮೂರು ಪ್ರಶ್ನೆಗಳಿಗೆ ಮೂರು ವಿಭಿನ್ನ ಉತ್ತರಗಳಿವೆ। ಕೆಳಗಿನ ಕೋಷ್ಟಕವೇ ನಿರ್ಧಾರ, ಅದರ ಸಾರಾಂಶವಲ್ಲ।
| Property | Signal that answers it | What it still leaves open |
|---|---|---|
| Existence | The platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOS | Tunnels of a type the platform does not manage, which includes most third-party clients |
| Path | A route lookup for the one destination, or a scoped proxy or interface key that names the tunnel | Whether the far end is the peer you trust |
| Identity | An authenticated response from the far end, or a source-address policy applied on the server | Which local interface carried the packets |
ಕೊನೆಯ ಸಾಲನ್ನು ನಿಧಾನವಾಗಿ ಓದಿ। ಉತ್ತರಿಸುವ ಖಾಸಗಿ ಹೋಸ್ಟ್ ಏನೋ ಉತ್ತರಿಸಿದೆ ಎಂದು ಸಾಬೀತುಪಡಿಸುತ್ತದೆ, ಉತ್ತರ ಸುರಂಗದ ಮೂಲಕ ಬಂತು ಎಂದಲ್ಲ, ಮತ್ತು ಇನ್ನೊಂದು ತುದಿಯಲ್ಲಿ ಯಾರಿದ್ದಾರೆ ಎಂಬುದರ ಬಗ್ಗೆ ಏನನ್ನೂ ಹೇಳುವುದಿಲ್ಲ। ನಿಮಗೆ ಬೇಕಾದ ಗುಣ ಮಾರ್ಗವಾದರೆ, ಮಾರ್ಗವನ್ನೇ ಅಳೆಯಿರಿ।
ಅಸ್ತಿತ್ವ: ಪ್ಲಾಟ್ಫಾರ್ಮ್ನ ಸ್ವಂತ ಸ್ಥಿತಿ
Windows ಸ್ಥಳೀಯ ಪ್ರೊಫೈಲ್ಗಳಿಗೆ ಇದನ್ನು Remote Access Service API ಮೂಲಕ ಉತ್ತರಿಸುತ್ತದೆ। RasEnumConnections ಯಾವುದು ಸಂಪರ್ಕಗೊಂಡಿದೆ ಎಂದು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ, RasGetConnectStatus ಒಂದು ನಮೂದಿನ ಸ್ಥಿತಿಯನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ, ಮತ್ತು RasGetLinkStatistics ವೇಗ, ಬೈಟ್ ಕೌಂಟರ್ಗಳು ಮತ್ತು ಸಂಪರ್ಕದ ವಯಸ್ಸನ್ನು ಸೇರಿಸುತ್ತದೆ। ಮಿತಿಗಳೇ ಮುಖ್ಯ: OpenVPN, WireGuard ಮತ್ತು ತಯಾರಕರ ಕ್ಲೈಂಟ್ಗಳು ಎಂದಿಗೂ RAS ಸಂಪರ್ಕವನ್ನು ನೋಂದಾಯಿಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಆ ರೀತಿಯ ಆರೋಗ್ಯಕರ ಸುರಂಗ ಖಾಲಿ ಪಟ್ಟಿ ತೋರಿಸುತ್ತದೆ ಮತ್ತು ಮುಗ್ಧ ಕೋಡ್ ಅದನ್ನು ಆಫ್ ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ।
Linux ಡೆಸ್ಕ್ಟಾಪ್ಗಳು ಅದೇ ಗುಣವನ್ನು D-Bus ನಲ್ಲಿ NetworkManager ಮೂಲಕ ಬಹಿರಂಗಪಡಿಸುತ್ತವೆ, ಅಲ್ಲಿ VPN ಸಂಪರ್ಕ ವಸ್ತುವಿನ ಮೇಲಿನ PropertiesChanged ಪರಿಶೀಲನೆಯನ್ನು ಘಟನೆಯಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ ಮತ್ತು State ಗುಣವು ಕೊಂಡಿ ಸಂಪರ್ಕಿತ ಸ್ಥಿತಿಯನ್ನು ತಲುಪಿದಾಗ ವರದಿ ಮಾಡುತ್ತದೆ। ಶೆಲ್ನಿಂದ nmcli connection show --active ಅದೇ ಮಾಹಿತಿಯನ್ನು ಓದುತ್ತದೆ, ಮತ್ತು ಡೀಬಗ್ ಮಾಡುವಾಗ ನಿಮಗೆ ಬೇಕಾಗಿರುವುದು ಅದೇ। macOS ಆ ಪಟ್ಟಿಯನ್ನು System Configuration ಚೌಕಟ್ಟಿನಲ್ಲಿ ಇಟ್ಟುಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು scutil ಅದರ ಆಜ್ಞಾ ಸಾಲಿನ ನೋಟ। ಮೂರೂ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ನಿರ್ವಹಿಸುವ ಸಂಪರ್ಕವನ್ನು ವಿವರಿಸುತ್ತವೆ, ಮತ್ತು ಮೂರೂ ಅದು ನಿರ್ವಹಿಸದ ಸುರಂಗದ ಬಗ್ಗೆ ಮೌನವಾಗಿರುತ್ತವೆ।
ಮಾರ್ಗ: ಪ್ಯಾಕೆಟ್ ನಿಜವಾಗಿ ಎಲ್ಲಿಗೆ ಹೋಗುತ್ತದೆ
ಹೆಸರು ಹೊಂದಾಣಿಕೆ ಎಲ್ಲರೂ ಮೊದಲು ಹಿಡಿಯುವ ಸಣ್ಣ ದಾರಿ: ಇಂಟರ್ಫೇಸ್ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡಿ, ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು tun, tap, ppp ಅಥವಾ ipsec ವಿರುದ್ಧ ಪರೀಕ್ಷಿಸಿ, ಮತ್ತು ಹೊಂದಾಣಿಕೆಯನ್ನು ಸಾಕ್ಷಿ ಎಂದು ತಿಳಿಯಿರಿ। ಇದು ಒಂದು ಅಂದಾಜು ವಿಧಾನ, ಮತ್ತು ಇಂಟರ್ಫೇಸ್ ಗುಂಪು ಅದರ ಮೂಲಕ ಏನಾದರೂ ಚಲಿಸುತ್ತಿದ್ದರೂ ಇಲ್ಲದಿದ್ದರೂ ಒಂದೇ ರೀತಿ ಕಾಣಬಹುದು। ಹಳೆಯ iOS ಬಿಲ್ಡ್ಗಳು ಹೀಗೆ ಉತ್ತರಿಸುತ್ತಿದ್ದವು ಮತ್ತು ನಂತರದವು ನಿಲ್ಲಿಸಿದವು, ಏಕೆಂದರೆ ಕಾಣುವ ಇಂಟರ್ಫೇಸ್ಗಳು ಇನ್ನು ಎರಡು ಸ್ಥಿತಿಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸುತ್ತಿರಲಿಲ್ಲ।
ಅಲ್ಲಿ ಅದನ್ನು ಬದಲಿಸಿದ್ದು ಸಿಸ್ಟಂ ಪ್ರಾಕ್ಸಿ ನಿಘಂಟು। VPN ಸಂಪರ್ಕಗೊಂಡಿರುವಾಗ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳ ಕರೆ ಸುರಂಗಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಇಂಟರ್ಫೇಸ್ಗಳಿಗೆ ಸೀಮಿತವಾದ ಕೀಗಳನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ, ಮತ್ತು ಏನೂ ಸಂಪರ್ಕಗೊಂಡಿಲ್ಲದಿದ್ದಾಗ ನಿಘಂಟು ಖಾಲಿಯಾಗಿ ಬರುತ್ತದೆ। ಇದು ಕೇಳಿಸುವುದಕ್ಕಿಂತ ದುರ್ಬಲ ಹೇಳಿಕೆ, ಏಕೆಂದರೆ ಇದು ಸುರಂಗ ಇದೆ ಎಂಬ ಸಿಸ್ಟಂನ ನಂಬಿಕೆಯನ್ನು ದಾಖಲಿಸುತ್ತದೆ, ಯಾವ ಗಮ್ಯಸ್ಥಾನ ಅದನ್ನು ಬಳಸುತ್ತದೆ ಎಂದಲ್ಲ।
Android ಗೆ ಈ ಬಲೆಗೆ ತನ್ನದೇ ಆದ ಆವೃತ್ತಿ ಇದೆ: vpn.connectivity ಪ್ರಸಾರವು ಕೆಲವು ಬಿಲ್ಡ್ಗಳಲ್ಲಿ ಮ್ಯಾನಿಫೆಸ್ಟ್ನಲ್ಲಿ ಘೋಷಿಸಿದ ಸ್ವೀಕರಿಸುವವರನ್ನು ತಲುಪುತ್ತದೆ ಮತ್ತು ಇತರವುಗಳಲ್ಲಿ ರನ್ಟೈಮ್ನಲ್ಲಿ ನೋಂದಾಯಿಸಿದ ಸ್ವೀಕರಿಸುವವರನ್ನು। ಅದನ್ನು ಉತ್ತಮ ಪ್ರಯತ್ನ ಎಂದು ಪರಿಗಣಿಸಿ, ಮತ್ತು ಅದರ ಹಿಂದೆ ನೇರ ಪರಿಶೀಲನೆಯನ್ನು ಇರಿಸಿ।
ಗಮ್ಯಸ್ಥಾನವೇ ಮುಖ್ಯವಾದಾಗ, ಅಡಾಪ್ಟರ್ ಪಟ್ಟಿಯ ಬದಲು ರೂಟಿಂಗ್ ಕೋಷ್ಟಕವನ್ನು ಕೇಳಿ। ಡೀಫಾಲ್ಟ್ ಗೇಟ್ವೇ ಅಂದಾಜುಗಳು ಬಹು-ನೆಟ್ವರ್ಕ್ ಯಂತ್ರಗಳಲ್ಲಿ ಮತ್ತು ತಮ್ಮದೇ ಗೇಟ್ವೇ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಸುರಂಗಗಳಲ್ಲಿ ಮುರಿಯುತ್ತವೆ।
ಗುರುತು: ದೂರದ ತುದಿಯನ್ನು ಪರಿಶೀಲಿಸಿ
ಪ್ರತಿ ಕೆಲವು ಸೆಕೆಂಡುಗಳಿಗೊಮ್ಮೆ ದೂರದ ತುದಿಗೆ ICMP ಪ್ರತಿಧ್ವನಿ ಕಳುಹಿಸುವ ಲೂಪ್ ಈ ರೀತಿಯ ಅಗ್ಗದ ಪರಿಶೀಲನೆ, ಮತ್ತು ಅದು ಉಪಯುಕ್ತ ದಿಕ್ಕಿನಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ। ಅದನ್ನು ಖಾಸಗಿ ನೆಟ್ವರ್ಕ್ನ ಒಳಗೆ ಮಾತ್ರ ಇರುವ ವಿಳಾಸಕ್ಕೆ ಗುರಿಪಡಿಸಿ, ಏಕೆಂದರೆ ಸಾರ್ವಜನಿಕ ವಿಳಾಸವು ಯಾವುದೇ ಕೆಲಸ ಮಾಡುವ ಮೇಲ್ಮುಖ ಕೊಂಡಿಯ ಮೇಲೆ ಉತ್ತರಿಸುತ್ತದೆ ಮತ್ತು ಏನನ್ನೂ ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ। ICMP ಫಿಲ್ಟರ್ ಆಗುವ ಸ್ಥಳದಲ್ಲಿ, ಸೇವಾ ಪೋರ್ಟ್ಗೆ ಸಣ್ಣ TCP ಸಂಪರ್ಕ ಅದೇ ಕೆಲಸ ಮಾಡುತ್ತದೆ।
ಸರ್ವರ್-ಸೈಡ್ ಪರಿಶೀಲನೆಗೆ ನಿಖರವಾಗಿ ಒಂದೇ ಸಂಕೇತ ಲಭ್ಯ: ಸಂಪರ್ಕದ ಮೂಲ ವಿಳಾಸ। ಶ್ರೇಣಿಗಳ ದಾಸ್ತಾನನ್ನು ನಿರ್ವಹಿಸುವುದು ನಿರ್ವಹಣಾ ಕೆಲಸ, ಮತ್ತು ಅದು ಅದೇ ಬ್ಲಾಕ್ ಬಳಸುವ ಬೇರೆ ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ನಿಂದ ಸುರಂಗವನ್ನು ಪ್ರತ್ಯೇಕಿಸಲಾರದು।
ಒರಟು ನೀತಿ ಇದರೊಂದಿಗೆ ಬದುಕಬಲ್ಲದು। ಗುರುತು ಬದುಕಲಾರದು, ಆದ್ದರಿಂದ ಅದರ ಪ್ಯಾಕೆಟ್ಗಳು ಎಲ್ಲಿಂದ ಬರುತ್ತಿರುವಂತೆ ಕಾಣುತ್ತವೆ ಎಂಬುದನ್ನು ನಂಬುವ ಬದಲು ಕ್ಲೈಂಟ್ ಅನ್ನು ದೃಢೀಕರಿಸಿ।
ವರ್ಗವನ್ನು ದಾಖಲಿಸಿ, ತೀರ್ಪನ್ನಲ್ಲ
ವೈಫಲ್ಯದ ವರ್ಗಗಳನ್ನು ಲಾಗ್ನಲ್ಲಿ ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ: ಯಾವುದೇ ಇಂಟರ್ಫೇಸ್ ಇಲ್ಲ, ಇಂಟರ್ಫೇಸ್ ಇದೆ ಆದರೆ ಗಮ್ಯಸ್ಥಾನ ತಲುಪಲಾಗದು, ಗಮ್ಯಸ್ಥಾನ ತಲುಪಬಹುದು ಆದರೆ ದೃಢೀಕರಣ ತಿರಸ್ಕೃತ। ಇವು ಮೂರು ವಿಭಿನ್ನ ಮಾಲೀಕರು, ಮತ್ತು ಪ್ರತಿಯೊಬ್ಬರೂ ಬೇರೆ ತನಿಖೆಯನ್ನು ತೆರೆಯುತ್ತಾರೆ।
ಅವುಗಳನ್ನು ಒಂದೇ “VPN ಆಫ್” ಆಗಿ ಒಟ್ಟುಗೂಡಿಸುವುದು ವರದಿಯನ್ನು ಸರಿಪಡಿಸಲಾಗದ ತಂಡಕ್ಕೆ ಕಳುಹಿಸುತ್ತದೆ। ವರ್ಗವೇ ಉಪಯುಕ್ತ ಔಟ್ಪುಟ್; ತೀರ್ಪೇ ಅದನ್ನು ತಪ್ಪಾಗಿಸುತ್ತದೆ।