ಹುಕ್ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಖಾಲಿ $_ENV ಸರಣಿಯು OpenVPN ಏನನ್ನೂ ರವಾನಿಸಿಲ್ಲ ಎಂಬ ಸಾಕ್ಷಿಯಂತೆ ತೋರುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಅದು ಸಂಪೂರ್ಣ ಬೇರೆಯದೇ ಸಾಕ್ಷಿ: ಆ ಸೂಪರ್ಗ್ಲೋಬಲ್ ತುಂಬದಂತೆ PHP ಸಂರಚಿಸಲಾಗಿತ್ತು, ಮತ್ತು ಮೌಲ್ಯಗಳು ಪ್ರಕ್ರಿಯೆಯ ಪರಿಸರದಲ್ಲೇ ಇದ್ದವು. ಎರಡನೇ ತಪ್ಪು ತೀರ್ಮಾನ ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ, ಏಕೆಂದರೆ ಸಂಪರ್ಕ ಹುಕ್ನ ಎರಡು ವಿಳಾಸ ಚರಗಳು ಬೇರೆ ಬೇರೆ ವಿಷಯಗಳನ್ನು ಸೂಚಿಸುತ್ತವೆ ಮತ್ತು ಒಂದರ ಬದಲು ಇನ್ನೊಂದು ಬಳಸಲ್ಪಡುತ್ತವೆ. ಎರಡೂ ತಪ್ಪುಗಳು ತಪ್ಪಾದದರಿಂದ ಆರಂಭಿಸಿದರೆ ಒಂದು ಮಧ್ಯಾಹ್ನವನ್ನು ತಿನ್ನುತ್ತವೆ.

ಎರಡು ವಿಳಾಸಗಳು, ಎರಡು ಬೇರೆ ಬೇರೆ ಹೇಳಿಕೆಗಳು

ಹೊರ ತುದಿ ಎಂದರೆ ಕ್ಲೈಂಟ್ ಸಂಪರ್ಕಿಸಿದಾಗ ಸರ್ವರ್ ಗಮನಿಸಿದ್ದು, IPv4 ಗೆ trusted_ip ಮತ್ತು IPv6 ಗೆ trusted_ip6 ಆಗಿ ಲಭ್ಯ. ವರ್ಚುವಲ್ ವಿಳಾಸ ಎಂದರೆ ಈ ಅವಧಿಗೆ ಪೂಲ್ ಹಂಚಿದ್ದು, ifconfig_pool_remote_ip ಆಗಿ ಲಭ್ಯ.

ಅವು ಬೇರೆ ಬೇರೆ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರಿಸುತ್ತವೆ, ಮತ್ತು ದಾಖಲೆಗೆ ಸಾಮಾನ್ಯವಾಗಿ ಎರಡೂ ಬದಲು ಒಂದು ಬೇಕು. ಮೊದಲನೆಯದು ಸಂಪರ್ಕ ಎಲ್ಲಿಂದ ಬಂತು ಎಂಬುದು, ಅದು ನೂರಾರು ಜನ ಬಳಸುವ ಹಂಚಿಕೆಯ NAT ವಿಳಾಸವಾಗಿರಬಹುದು. ಎರಡನೆಯದು ಈ ಅವಧಿ ಸುರಂಗದ ಒಳಗೆ ಎಲ್ಲಿ ಇರುತ್ತದೆ ಎಂಬುದು, ಮತ್ತು ಅದನ್ನು ನಂತರ ಇನ್ನೊಂದು ಅವಧಿಗೆ ಮರುಹಂಚಿಕೆ ಮಾಡಬಹುದು. ಎರಡನ್ನೂ ಗೊಂದಲಿಸಿದರೆ ನಂಬಲರ್ಹವಾಗಿ ಕಾಣುವ ಮತ್ತು ತಪ್ಪಾದ ದಾಖಲೆಗಳು ಉಂಟಾಗುತ್ತವೆ.

ಕನಿಷ್ಠ ಓದುವಿಕೆ ಹೀಗೆ ಕಾಣುತ್ತದೆ.

$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner  = getenv('ifconfig_pool_remote_ip');
$outer  = $outer4 !== false ? $outer4 : $outer6;

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

PHP ಹೇಗೆ ಪ್ರಾರಂಭವಾಯಿತು ಎಂದು ಪರಿಶೀಲಿಸಿ, ನಿಮ್ಮ ಶೆಲ್ ಅಲ್ಲ

ಹುಕ್ VPN ಡೀಮನ್ನ ಮಗುವಾಗಿ, ಡೀಮನ್ ನಿರ್ಮಿಸುವ ಪರಿಸರದೊಂದಿಗೆ ಚಲಿಸುತ್ತದೆ. ನಿಮ್ಮ ಸಂವಾದಾತ್ಮಕ ಶೆಲ್ಗೆ ಬೇರೆ ಪರಿಸರ ಇರುತ್ತದೆ, ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕೈಯಿಂದ ಚಲಾಯಿಸುವುದು ಹುಕ್ನ ಬದಲು ಶೆಲ್ನ ಪರಿಸರವನ್ನು ಪರೀಕ್ಷಿಸುತ್ತದೆ.

ಹುಕ್ ನಿಜವಾಗಿಯೂ ನೀವು ನಿರೀಕ್ಷಿಸಿದ ಹಂತದಲ್ಲಿ ಸಕ್ರಿಯವಾಯಿತು ಎಂದು ದೃಢೀಕರಿಸುವ ಮೂಲಕ ಆರಂಭಿಸಿ. ತಪ್ಪು ಹಂತಕ್ಕೆ ಜೋಡಿಸಿದ ಸ್ಕ್ರಿಪ್ಟ್, ಅಥವಾ ಸೂಚನೆ ಬೇರೆ ಮಾರ್ಗಕ್ಕೆ ತೋರಿಸುವುದರಿಂದ ಎಂದೂ ಚಲಿಸದ ಸ್ಕ್ರಿಪ್ಟ್, ಕಾಣೆಯಾದ ಚರದಂತೆಯೇ ಅದೇ ಲಕ್ಷಣ ನೀಡುತ್ತದೆ. ಸ್ಕ್ರಿಪ್ಟ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಉದ್ದೇಶಪೂರ್ವಕ ಮಾರ್ಕರ್ ಸಾಲು ಸೇರಿಸಿ ಮತ್ತು ಬೇರೆ ಯಾವುದನ್ನೂ ಪರಿಶೀಲಿಸುವ ಮೊದಲು ಅದು ಕಾಣಿಸುತ್ತದೆ ಎಂದು ದೃಢೀಕರಿಸಿ. ಲಾಗ್ನಲ್ಲಿ ಒಂದೇ ಸಮಯಮುದ್ರೆಯ ಸಾಲು «ಎಂದೂ ಚಲಿಸಲಿಲ್ಲ» ಮತ್ತು «ಮೌಲ್ಯವಿಲ್ಲದೆ ಚಲಿಸಿತು» ಎಂಬುದನ್ನು ಬೇರ್ಪಡಿಸುತ್ತದೆ.

ನಂತರ ಆ ಕರೆ ಯಾವ ಇಂಟರ್ಪ್ರಿಟರ್ ಮತ್ತು ಯಾವ ಸಂರಚನಾ ಕಡತವನ್ನು ಬಳಸುತ್ತದೆ ಎಂದು ದೃಢೀಕರಿಸಿ. ವೆಬ್ ಸರ್ವರ್ಗಾಗಿ PHP ಸಂರಚನೆಯನ್ನು ಸಂಪಾದಿಸುವುದು OpenVPN ಪ್ರಾರಂಭಿಸಿದ CLI ಪ್ರಕ್ರಿಯೆಗೆ ಏನನ್ನೂ ಬದಲಾಯಿಸುವುದಿಲ್ಲ, ಮತ್ತು ಎರಡೂ ಸಂಪೂರ್ಣ ಬೇರೆ ಬೇರೆ php.ini ಕಡತಗಳನ್ನು ಲೋಡ್ ಮಾಡಬಹುದು.

ಖಾಲಿ $_ENV ಏಕೆ ಏನನ್ನೂ ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ

PHP ನ getenv ಉಲ್ಲೇಖ ಪ್ರಕ್ರಿಯೆಯ ಪರಿಸರವನ್ನು ನೇರವಾಗಿ ಓದುವುದನ್ನು ವಿವರಿಸುತ್ತದೆ, ಅದು ಹೆಸರು ಇಲ್ಲದಿದ್ದಾಗ false ಹಿಂತಿರುಗಿಸುತ್ತದೆ. $_ENV ಸೂಪರ್ಗ್ಲೋಬಲ್ ಪ್ರತ್ಯೇಕವಾಗಿ ತುಂಬುತ್ತದೆ, ಮತ್ತು ಯಾವ ಸೂಪರ್ಗ್ಲೋಬಲ್ಗಳು ತುಂಬುತ್ತವೆ ಎಂಬುದನ್ನು variables_order ಸೂಚನೆ ನಿರ್ಧರಿಸುತ್ತದೆ.

ಆ ಸೂಚನೆ E ಬಿಟ್ಟುಬಿಟ್ಟರೆ, ಪರಿಸರದಲ್ಲಿ ಏನಿದ್ದರೂ $_ENV ಖಾಲಿಯಾಗಿರುತ್ತದೆ. ಅದನ್ನು ಸೂಚ್ಯಂಕ ಮಾಡುವ ಕೋಡ್ ಆಗ ವಾಸ್ತವವಾಗಿ ಇರುವ ಚರವನ್ನು ಕಾಣೆಯಾಗಿದೆ ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ, ಮತ್ತು ಉತ್ತರ php.ini ನಲ್ಲಿರುವಾಗ ತನಿಖೆ OpenVPN ಕಡೆಗೆ ಹೋಗುತ್ತದೆ. ಸೂಚನೆಯನ್ನು ವಿಶೇಷವಾಗಿ CLI ಸಂರಚನೆಗೆ ಪರಿಶೀಲಿಸಿ, ವೆಬ್ ಸರ್ವರ್ಗಲ್ಲ.

getenv ನಿಂದ ಓದುವುದು ಈ ಇಡೀ ಗೊಂದಲದ ವರ್ಗವನ್ನು ತಪ್ಪಿಸುತ್ತದೆ, ಮತ್ತು ಇಂಟರ್ಪ್ರಿಟರ್ ಕರೆಯುವ ಮೊದಲು ಪರಿಸರವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವ ಸುತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಅದನ್ನು ಬೇರೆ ರೂಪದಲ್ಲಿ ಮತ್ತೆ ತರುತ್ತದೆ.

ಸಂಬಂಧವನ್ನು ಸಂಗ್ರಹಿಸಿ, ಸಾಲಿನ ನವೀಕರಣವಲ್ಲ

ಬರೆಯುವ ಮೊದಲು ದಾಖಲೆಗೆ ಯಾವ ಮೌಲ್ಯ ಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಿ. ಅವಧಿ ಎಲ್ಲಿಂದ ಬಂತು ಎಂದು ಗುರುತಿಸುವುದು ಗುರಿಯಾದರೆ, ಹೊರ ತುದಿಯನ್ನು ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಅದನ್ನು ವೀಕ್ಷಣೆ ಎಂದು ಲೇಬಲ್ ಮಾಡಿ. ಸಂಪರ್ಕದ ಅವಧಿಗೆ ಅವಧಿಯನ್ನು ಸುರಂಗ ವಿಳಾಸಕ್ಕೆ ನಕ್ಷೆ ಮಾಡುವುದು ಗುರಿಯಾದರೆ, ಪೂಲ್ ವಿಳಾಸವನ್ನು ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಅದನ್ನು ಅವಧಿಗೆ ಜೋಡಿಸಿ.

ಸುರಂಗ ವಿಳಾಸ ಹಂಚಿಕೊಳ್ಳುವ ಪ್ರತಿ ಸಾಲಿನ ಪ್ರಕಾರವಲ್ಲ, ದೃಢೀಕೃತ ಗುರುತು ಮತ್ತು ಪ್ರಸ್ತುತ ಅವಧಿಯ ಪ್ರಕಾರ ನವೀಕರಿಸಿ, ಏಕೆಂದರೆ ಪೂಲ್ ವಿಳಾಸಗಳು ಮತ್ತೆ ಬಳಸಲ್ಪಡುತ್ತವೆ ಮತ್ತು ತಡವಾಗಿ ಬಂದ ಸಂಪರ್ಕ ಕಡಿತ ಘಟನೆ ಹೊಸ ಸಂಪರ್ಕದ ದತ್ತಾಂಶವನ್ನು ಮೇಲೆ ಬರೆಯಬಹುದು. ಕೇವಲ IPv4 ಮೌಲ್ಯವನ್ನು ಸದ್ದಿಲ್ಲದೆ ಬರೆಯುವ ಬದಲು IPv6 ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ವಹಿಸಿ. NULL ಹೊರ ವಿಳಾಸವಿರುವ ಸಾಲು ತಪ್ಪು ವಿಳಾಸದ ಸಾಲಿಗಿಂತ ಉತ್ತಮ, ಏಕೆಂದರೆ ಮೊದಲನೆಯದು ಸ್ಪಷ್ಟವಾಗಿ ಅಪೂರ್ಣವಾಗಿದೆ.

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

ಪರಿಸರವನ್ನು ಸುರಿಯದೆ ರೋಗನಿರ್ಣಯ ಮಾಡಿ

ಯಾವ ಹೆಸರುಗಳು ಇದ್ದವು, ಯಾವ ಹಂತ ಚಲಿಸಿತು ಮತ್ತು ಯಾವ ಇಂಟರ್ಪ್ರಿಟರ್ ಬಳಸಲಾಯಿತು ಎಂದು ಲಾಗ್ ಮಾಡಿ. ಇಡೀ ಪರಿಸರವನ್ನು ಮುದ್ರಿಸಬೇಡಿ, ಏಕೆಂದರೆ ಹುಕ್ ಪ್ರಕ್ರಿಯೆ ಲಾಗ್ ಕಡತಕ್ಕೆ ಬರಬಾರದ ಸಂಬಂಧವಿಲ್ಲದ ಮೌಲ್ಯಗಳನ್ನು ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯಬಹುದು.

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

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