OpenVPN ಹುಕ್ ಘಟನೆಗಳು: ಹೆಸರು ಮತ್ತು ಸಮಯಮುದ್ರೆ ಏಕೆ ಕೀಲಿಯಲ್ಲ
ಡಿಸ್ಕನೆಕ್ಟ್ ಹುಕ್ ಸಂಪರ್ಕದ ಸಮಯವನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ, ಡಿಸ್ಕನೆಕ್ಟ್ನ ಸಮಯವಲ್ಲ. ಬಳಕೆದಾರರ ಹೆಸರಿನೊಂದಿಗೆ ಜೋಡಿಸಿದಾಗ ಅದು ತಪ್ಪು ಅಧಿವೇಶನವನ್ನು ಮುಚ್ಚಬಹುದು; ಬದಲಾಗಿ ಒಂದು ಗುರುತನ್ನು ಹೊಂದಿರಿ.
ಒಂದೇ ಹೆಸರಿನಲ್ಲಿ ಎರಡನೇ ಸಂಪರ್ಕ ಈಗಾಗಲೇ ಪ್ರಾರಂಭವಾದ ನಂತರ ಡಿಸ್ಕನೆಕ್ಟ್ ದಾಖಲೆ ಬರುತ್ತದೆ, ಮತ್ತು ಆ ಬಳಕೆದಾರರ ಹೊಸ ಸಾಲನ್ನು ನವೀಕರಿಸುವ ನಿರ್ವಾಹಕ ತಪ್ಪು ಅಧಿವೇಶನವನ್ನು ಮುಚ್ಚುತ್ತದೆ. ತಪ್ಪು ಸಮಯಮುದ್ರೆ ಹೋಲಿಕೆಯಲ್ಲ. ತಪ್ಪು ಎಂದರೆ ಹೆಸರು ಮತ್ತು ಪೂರ್ಣ ಸೆಕೆಂಡ್ ಒಂದು ಅಧಿವೇಶನವನ್ನು ಗುರುತಿಸುತ್ತವೆ ಎಂಬ ಊಹೆ. ಹುಕ್ ಘಟನೆಗಳು ಸಂಪರ್ಕಗಳನ್ನು ವಿವರಿಸುತ್ತವೆ, ಮತ್ತು ಸಂಪರ್ಕಕ್ಕೆ ಅದಕ್ಕೆ ಮಾತ್ರ ಸೇರಿದ ಕೀಲಿ ಬೇಕು.
ಡಿಸ್ಕನೆಕ್ಟ್ ಚರಗಳು ನಿಜವಾಗಿ ಏನನ್ನು ಅರ್ಥೈಸುತ್ತವೆ ಎಂಬುದರಿಂದ ಪ್ರಾರಂಭಿಸಿ. ಆಗ ಮಾತ್ರ ಗುರುತಿಸುವಿಕೆಯ ಆಯ್ಕೆ ಅರ್ಥಪೂರ್ಣವಾಗುತ್ತದೆ.
ಡಿಸ್ಕನೆಕ್ಟ್ ಹುಕ್ ನಿಜವಾಗಿ ಏನನ್ನು ಹೊತ್ತೊಯ್ಯುತ್ತದೆ
Community OpenVPN 2.6 ನಲ್ಲಿ, ಹುಕ್ ಉಲ್ಲೇಖ time_unix ಅನ್ನು ಕ್ಲೈಂಟ್ ಸಂಪರ್ಕಿಸಿದ ಕ್ಷಣ ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ; ಅದು ಸಂಪರ್ಕ ಹುಕ್ ಚಲಿಸುವ ಮೊದಲು ಹೊಂದಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಡಿಸ್ಕನೆಕ್ಟ್ ಹುಕ್ ನಂತರ ಪ್ರಚೋದಿಸಿದಾಗ ಮರು ವ್ಯಾಖ್ಯಾನಿಸುವುದಿಲ್ಲ. time_duration ಆ ಅಧಿವೇಶನದ ಉದ್ದವನ್ನು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ನೀಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಅಂತ್ಯವು ಸರಿಸುಮಾರು ಸಂಪರ್ಕದ ಸಮಯ ಮತ್ತು ಅವಧಿಯ ಮೊತ್ತ. ಎರಡೂ ಪೂರ್ಣ ಸೆಕೆಂಡುಗಳು, ಮತ್ತು ಯಾವುದೂ ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ ಘಟನೆಯನ್ನು ಸಂಸ್ಕರಿಸಿದ ಕ್ಷಣವಲ್ಲ. ಈ ಮೂರು ಸಮಯಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸುವುದೇ ಪರಸ್ಪರ ಸಂಬಂಧವನ್ನು ನಿಜವಾಗಿ ನಿಲ್ಲಿಸುತ್ತದೆ, ಪರೀಕ್ಷೆಯ ಸಮಯದಲ್ಲಿ ಮಾತ್ರ ಸರಿಯಾಗಿ ಕಾಣುವಂತೆ ಮಾಡುವುದಿಲ್ಲ.
ಈ ಅಂಕಗಣಿತವನ್ನು ಬರೆಯಲು ಯೋಗ್ಯವಾಗಿದೆ, ಏಕೆಂದರೆ ಇದು ಹುಕ್ ಸ್ವತಃ ನೀಡುವ ಏಕೈಕ ಅಂತ್ಯ ಸಮಯ. ಸಂಸ್ಕರಣಾ ವಿಳಂಬ ಮತ್ತು ಆತಿಥೇಯಗಳ ನಡುವಿನ ಗಡಿಯಾರ ವ್ಯತ್ಯಾಸಗಳು ಇನ್ನೂ ಅದರ ಹೊರಗಿವೆ.
ಸ್ಪಷ್ಟ ಜೋಡಿ ಏಕೆ ಅನನ್ಯವಲ್ಲ
ಹೆಸರನ್ನು ಸಂಪರ್ಕ ಸಮಯದೊಂದಿಗೆ ಜೋಡಿಸುವುದು ಹುಡುಕಾಟವನ್ನು ಸಂಕುಚಿಸುತ್ತದೆ ಮತ್ತು ಇನ್ನೂ ಅಧಿವೇಶನವನ್ನು ಗುರುತಿಸುವುದಿಲ್ಲ. ಕ್ಲೈಂಟ್ ಅದೇ ಸೆಕೆಂಡಿನಲ್ಲಿ ಮತ್ತೆ ಸಂಪರ್ಕಿಸಬಹುದು, ಆದ್ದರಿಂದ ಎರಡು ಅಧಿವೇಶನಗಳು ಎರಡೂ ಮೌಲ್ಯಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು. ಎರಡು ಡೀಮನ್ ನಿದರ್ಶನಗಳು, ಅಥವಾ ಅದೇ ಸಂರಚನೆಯನ್ನು ಇಟ್ಟುಕೊಳ್ಳುವ ಸರ್ವರ್ ಬದಲಾವಣೆ, ಆ ಜೋಡಿಯನ್ನು ವಿವಿಧ ಪ್ರಕ್ರಿಯೆಗಳಿಂದ ಉತ್ಪಾದಿಸಬಹುದು. ಸುರಂಗ ವಿಳಾಸಗಳು ಸಹ ಅದೇ ಕಾರಣಕ್ಕೆ ಮರುಬಳಕೆಯಾಗುತ್ತವೆ, ಇದು ಅವುಗಳನ್ನು ಅಧಿವೇಶನದ ಗುಣಲಕ್ಷಣಗಳನ್ನಾಗಿ ಮಾಡುತ್ತದೆ, ಅದರ ಗುರುತಿಸುವಿಕೆಗಳನ್ನಲ್ಲ.
ವೈಫಲ್ಯದ ವಿಧಾನ ಶಾಂತವಾಗಿದೆ. ಮೊದಲ ಅಧಿವೇಶನದ ತಡವಾದ ಡಿಸ್ಕನೆಕ್ಟ್ ಹೊಸ ಸಾಲಿಗೆ ಹೊಂದಿಕೆಯಾಗಿ ಎರಡನೇ ಅಧಿವೇಶನ ಇನ್ನೂ ಬಳಸುತ್ತಿರುವ ಹಂಚಿಕೆಯನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಬಳಕೆದಾರರು ತಾವು ಏನೂ ಮಾಡದೆ ಯಾದೃಚ್ಛಿಕ ಪ್ರವೇಶ ನಷ್ಟವನ್ನು ಅನುಭವಿಸುತ್ತಾರೆ. ನಂತರ ಸರಿಯಾಗಿ ಕಾಣುವ ಸಾಲಿನ ಎಣಿಕೆ ಸಮಸ್ಯೆಯನ್ನು ಗುರುತಿಸುವುದನ್ನು ಕಷ್ಟಕರಗೊಳಿಸುತ್ತದೆ.
ಸ್ಥಿರ ಗುರುತು ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ
ನಿರ್ವಹಣಾ ಸಂಪರ್ಕಸ್ಥಾನ ಪ್ರತಿ ಕ್ಲೈಂಟ್ಗೆ ಕ್ಲೈಂಟ್-ನಿದರ್ಶನ ಗುರುತಿಸುವಿಕೆಯನ್ನು ನೀಡುತ್ತದೆ, ಮತ್ತು ಆ ಗುರುತಿಸುವಿಕೆ ಅದನ್ನು ನೀಡಿದ ಡೀಮನ್ ನಿದರ್ಶನಕ್ಕೆ ಸೀಮಿತವಾಗಿದೆ. ಕಾರ್ಯಸಾಧ್ಯವಾದ ಬಾಹ್ಯ ಕೀಲಿ ಸ್ಥಿರ ಸರ್ವರ್ ಗುರುತಿಸುವಿಕೆ, ಡೀಮನ್ ಪ್ರಾರಂಭವಾದಾಗ ಬದಲಾಗುವ ಯುಗ ಮತ್ತು ಆ ಕ್ಲೈಂಟ್ ID ಅನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ. ಯುಗ ಮುಖ್ಯ ಏಕೆಂದರೆ ಗುರುತಿಸುವಿಕೆಗಳು ಪ್ರಕ್ರಿಯೆಯೊಂದಿಗೆ ಮರುಪ್ರಾರಂಭವಾಗುತ್ತವೆ, ಮತ್ತು ಬರಿಯ ಪ್ರಕ್ರಿಯೆ ID ಅನ್ನು ನಂತರ ಸಂಬಂಧವಿಲ್ಲದ ಯಾವುದೋ ಮರುಬಳಕೆ ಮಾಡಬಹುದು.
ಮಗು ಸಂಪರ್ಕ ಸ್ಕ್ರಿಪ್ಟ್ ಒಳಗೆ ಹೊಂದಿಸಿದ ಪರಿಸರ ಚರಗಳು ಪೋಷಕ ಡೀಮನ್ನ ನಂತರದ ಡಿಸ್ಕನೆಕ್ಟ್ ಸ್ಕ್ರಿಪ್ಟ್ಗೆ ಹೋಗುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಆ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ತಮ್ಮದೇ ಪರಿಸರಗಳೊಂದಿಗೆ ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಗಳಾಗಿ ಚಲಿಸುತ್ತವೆ. ಆದ್ದರಿಂದ ಸಂಪರ್ಕದ ಸಮಯದಲ್ಲಿ UUID ರಚಿಸುವುದು ಅರ್ಧ ಪರಿಹಾರ. ಡಿಸ್ಕನೆಕ್ಟ್ ಬದಿಯು ಅದೇ UUID ಅನ್ನು ಹೆಸರಿಸಲು ಸಾಧ್ಯವಾಗಬೇಕು, ಅಂದರೆ ಗುರುತು ಎರಡೂ ಘಟನೆಗಳು ತಲುಪಬಹುದಾದ ಸ್ಥಳದಲ್ಲಿ ವಾಸಿಸಬೇಕು.
ನಿವೃತ್ತಿಯನ್ನು ಷರತ್ತುಬದ್ಧ ಮತ್ತು ಐಡೆಂಪೊಟೆಂಟ್ ಮಾಡಿ
ಅಧಿವೇಶನ ಮಾಲೀಕರಿಂದ ನಿವೃತ್ತಿ ಮಾಡಿ, ಬಳಕೆದಾರರಿಂದ ಅಲ್ಲ. ಹೆಸರಿಗೆ ಪ್ರಸ್ತುತ ಸೇರಿದ ಯಾವುದೇ ಹಂಚಿಕೆಯನ್ನು ಅಳಿಸುವ ನಿರ್ವಾಹಕ ಅಂತಿಮವಾಗಿ ತಪ್ಪಾದದ್ದನ್ನು ಅಳಿಸುತ್ತದೆ, ಮತ್ತು ಏಕೈಕ ರಕ್ಷಣೆ ಎಂದರೆ ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿರುವ ದಾಖಲೆಯೇ ಈ ಘಟನೆ ವಿವರಿಸುವ ದಾಖಲೆ ಎಂದು ಪರಿಶೀಲಿಸುವುದು.
ನಿರ್ವಹಣಾ ಸಂಪರ್ಕಸ್ಥಾನ ಒಂದೇ ಸಮಯದಲ್ಲಿ ಒಂದು ಸಂಪರ್ಕಿತ ನಿರ್ವಹಣಾ ಕ್ಲೈಂಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದೇ ಸಾಕೆಟ್ಗೆ ಸ್ಪರ್ಧಿಸುವ ಎರಡನೇ ವೀಕ್ಷಕರನ್ನು ಜೋಡಿಸುವ ಬದಲು ಈಗಾಗಲೇ ಅದನ್ನು ಹೊಂದಿರುವವರೊಂದಿಗೆ ಸಂಯೋಜಿಸಿ.
ಪುನರಾವರ್ತಿತ ಘಟನೆಗಳನ್ನು ಫಲಿತಾಂಶವನ್ನು ಎರಡು ಬಾರಿ ಬದಲಾಯಿಸದೆ ನಿರ್ವಹಿಸಿ, ಮತ್ತು ಜೋಡಿಯಾಗದ ಘಟನೆಗಳನ್ನು ಬಿಸಾಡುವ ಬದಲು ಸಮನ್ವಯಕ್ಕಾಗಿ ಇಟ್ಟುಕೊಳ್ಳಿ. ಡಿಸ್ಕನೆಕ್ಟ್ ಕಾಲ್ಬ್ಯಾಕ್ ದಾಖಲಿತ ಜೀವನಚಕ್ರ ಷರತ್ತುಗಳನ್ನು ಹೊಂದಿದೆ ಮತ್ತು ಕ್ರ್ಯಾಶ್ ಅಥವಾ ಕಠಿಣ ನಿಲುಗಡೆಯ ನಂತರ ಎಂದಿಗೂ ಬಾರದಿರಬಹುದು, ಆದ್ದರಿಂದ ವಿನ್ಯಾಸಕ್ಕೆ ಅಂತ್ಯದ ಘಟನೆ ಕಾಣೆಯಾದ ಅಧಿವೇಶನವನ್ನು ಪ್ರತಿನಿಧಿಸುವ ದಾರಿ ಬೇಕು.
ಅಸಹಜ ಪ್ರಕರಣಗಳನ್ನು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಪರೀಕ್ಷಿಸಿ: ಒಂದು ಸೆಕೆಂಡಿನಲ್ಲಿ ಎರಡು ಮರುಸಂಪರ್ಕಗಳು, ಎರಡು ಡೀಮನ್ ನಿದರ್ಶನಗಳು, ಸಂಸ್ಕರಣೆ ವಿಫಲವಾದ ಸಂಪರ್ಕ, ಮತ್ತು ಅಧಿವೇಶನದ ಮಧ್ಯದಲ್ಲಿ ಡೀಮನ್ ಮರುಪ್ರಾರಂಭ. ನಾಲ್ಕನ್ನೂ ತಡೆದುಕೊಳ್ಳುವ ಕೀಲಿಯೇ ನಂಬಲರ್ಹವಾದ ಕೀಲಿ.