ಒಂದೇ ಹೋಸ್ಟ್ನಲ್ಲಿ OpenVPN ಸರ್ವರ್ ಮತ್ತು ಕ್ಲೈಂಟ್: ಕ್ಲೈಂಟ್ಗಳು ಏಕೆ ಬೀಳುತ್ತವೆ
OpenVPN ಸೇವೆ ನೀಡುತ್ತಾ ತಾನೂ ಬಳಸುವ ಹೋಸ್ಟ್ ತನ್ನ ಟನೆಲ್ ಮೇಲಕ್ಕೆ ಇಟ್ಟುಕೊಳ್ಳಬಹುದು, ಆದರೆ ಸ್ಥಳೀಯ ಕ್ಲೈಂಟ್ಗಳು ಉತ್ತರಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತವೆ. ಎರಡು ವಿಷಯಗಳು ಇದನ್ನು ವಿವರಿಸುತ್ತವೆ: ಹಂಚಿಕೊಂಡ ಪೂಲ್ ಮತ್ತು ಹೊಸ ಡಿಫಾಲ್ಟ್ ರೂಟ್.
ಈಗಾಗಲೇ VPN ಸರ್ವರ್ ಚಾಲನೆಯಲ್ಲಿರುವ ಯಂತ್ರಕ್ಕೆ ಕ್ಲೈಂಟ್ ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ, ಮೊದಲ ಬಲಿ ಮೂಲ ಸೇವೆಯೇ ಆಗುತ್ತದೆ. ಹೊಸ ಟನೆಲ್ ಎಂದಿಗೂ ಸ್ಥಾಪನೆಯಾಗದಿರಬಹುದು, ಅಥವಾ ಸರ್ವರ್ನ ಇರುವ ಕ್ಲೈಂಟ್ಗಳು ಸದ್ದಿಲ್ಲದೆ ಉತ್ತರ ಪಡೆಯುವುದನ್ನು ನಿಲ್ಲಿಸಿದಾಗ ಅದು ಮೇಲೆ ಬರಬಹುದು. ಎರಡು ಘರ್ಷಣೆಗಳು ಎರಡೂ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡುತ್ತವೆ: ಈಗಾಗಲೇ ಬಳಕೆಯಲ್ಲಿರುವ ಟನೆಲ್ ಪೂಲ್, ಮತ್ತು ಹೊಸ ಕ್ಲೈಂಟ್-ಅರ್ಧವು ಸ್ಥಾಪಿಸಿದ, ಇಡೀ ಕೋಷ್ಟಕವನ್ನು ಆವರಿಸುವ ಡಿಫಾಲ್ಟ್ ರೂಟ್. ಎರಡೂ OpenVPN ದೋಷ ಸಂದೇಶ ನೀಡುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ವೈಫಲ್ಯವನ್ನು ಸರ್ವರ್ ಸಮಸ್ಯೆ ಎಂದು ಓದಲಾಗುತ್ತದೆ.
ಒಂದು ಯಂತ್ರ, ಎರಡು ಪಾತ್ರಗಳು, ಮತ್ತು ಉತ್ತರಗಳು ಎಲ್ಲಿಗೆ ಹೋಗಬೇಕು ಎಂಬುದರ ಬಗ್ಗೆ ಎರಡು ಹೊಂದಾಣಿಕೆಯಾಗದ ಉತ್ತರಗಳು.
ಅದೇ ಪೂಲ್, ಎರಡು ಸರ್ವರ್ಗಳು: ಯಾರು ಗೆಲ್ಲುತ್ತಾರೆ
ಪ್ರತಿ ಸರ್ವರ್ ಇನ್ಸ್ಟಾನ್ಸ್ಗೆ ತನ್ನದೇ ಟನೆಲ್ ಸಬ್ನೆಟ್ ಬೇಕು. server 10.8.0.0 255.255.255.0 ನಂತಹ ಸಾಲನ್ನು ಎರಡನೇ ಸಂರಚನೆಗೆ ನಕಲಿಸಿದರೆ ಎರಡೂ ಇನ್ಸ್ಟಾನ್ಸ್ಗಳಿಗೆ ಒಂದೇ ಪ್ರಿಫಿಕ್ಸ್ ಸಿಗುತ್ತದೆ, ಮತ್ತು ಫಲಿತಾಂಶವು ಪ್ರಾರಂಭಿಸಲು ನಿರಾಕರಣೆ ಅಥವಾ ಒಂದು ಸರ್ವರ್ನ ಕ್ಲೈಂಟ್ಗಳು ಇನ್ನೊಂದು ತನ್ನದೆಂದು ಭಾವಿಸುವ ವಿಳಾಸಗಳನ್ನು ಪಡೆಯುವ ಮೌನ ಸ್ಪರ್ಧೆ. ಬೇರೆ UDP ಪೋರ್ಟ್ಗಳು ಮತ್ತು ಬೇರೆ ಸಾಧನ ಹೆಸರುಗಳು ಸಹಾಯ ಮಾಡುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಎರಡೂ ವಿಳಾಸ ಸ್ಥಳವನ್ನು ಮುಟ್ಟುವುದಿಲ್ಲ. ಎರಡನೇ ಪೂಲ್ ಬದಲಿಸಿ, ಮತ್ತು ರೂಟ್ಗಳು ಅದನ್ನು ಉಲ್ಲೇಖಿಸುವ ಎಲ್ಲೆಡೆ ಬದಲಿಸಿ.
ಸಂಪಾದಿಸುವ ಮೊದಲು ಯಾವುದು ಸಕ್ರಿಯವಿದೆ ಎಂದು ಪಟ್ಟಿ ಮಾಡಿ: ip -4 addr show ಟನೆಲ್ ಸಾಧನಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ, ss -lunp ಆಲಿಸುವವರನ್ನು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ, ಮತ್ತು systemctl list-units ಘಟಕಗಳ ಹೆಸರು ಹೇಳುತ್ತದೆ. ಟನೆಲ್ ವಿಳಾಸಗಳ ಮೇಲೆ ಒಂದು ನೋಟ ಪೂಲ್ಗಳು ಘರ್ಷಿಸುತ್ತವೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ.
ಕ್ಲೈಂಟ್ ಪ್ರೊಫೈಲ್ ಕೋಷ್ಟಕಕ್ಕೆ ಏನು ಸೇರಿಸುತ್ತದೆ
ಕ್ಲೈಂಟ್-ಅರ್ಧವು ಸಂಪರ್ಕಗೊಂಡ ಕೂಡಲೇ ರೂಟ್ಗಳನ್ನು ಬರೆಯುತ್ತದೆ. redirect-gateway def1 ಡಿಫಾಲ್ಟ್ ರೂಟ್ ಅನ್ನು 0.0.0.0/1 ಜೊತೆಗೆ 128.0.0.0/1 ಆಗಿ ವಿಭಜಿಸುತ್ತದೆ, ಎರಡೂ ಹೊಸ ಸಾಧನದ ಮೂಲಕ ರೂಟ್ ಆಗುತ್ತವೆ, ಜೊತೆಗೆ ದೂರದ ಸರ್ವರ್ಗೆ ಹೋಗುವ, ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಭೌತಿಕ ಇಂಟರ್ಫೇಸ್ಗೆ ಪಿನ್ ಮಾಡಿದ ಹೋಸ್ಟ್ ರೂಟ್ ಸೇರಿದೆ. ಆ ಪಿನ್ ಟನೆಲ್ ತನ್ನ ಸ್ವಂತ ಸಾಗಣೆಗೆ ಮಾರ್ಗ ಇಟ್ಟುಕೊಳ್ಳಲು ಇದೆ. ಉಳಿದ ಎಲ್ಲವೂ, ಸ್ಥಳೀಯ ಸರ್ವರ್ ತನ್ನ ಕ್ಲೈಂಟ್ಗಳಿಗೆ ನೀಡಬೇಕಾದ ಉತ್ತರಗಳೂ ಸೇರಿ, ಈಗ ಹೊಸ ಡಿಫಾಲ್ಟ್ ಅನ್ನು ಅನುಸರಿಸಿ ದೂರದ ಕೊಂಡಿಯ ಮೂಲಕ ಹೊರಡುತ್ತವೆ.
ಹಾಗಾದರೆ ಎರಡನೇ ಘರ್ಷಣೆ ಮುರಿದ ಟನೆಲ್ ಅಲ್ಲ. ಅದು ಕೋಷ್ಟಕದ ತಪ್ಪು ಸ್ಥಳದಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಟನೆಲ್.
ಪಾತ್ರಗಳನ್ನು ಬೇರೆಯಾಗಿ ಇಡುವ ಮೂರು ದಾರಿಗಳು
ಅತ್ಯಂತ ಕಡಿಮೆ ಹಸ್ತಕ್ಷೇಪದ ಪರಿಹಾರ ಡಿಫಾಲ್ಟ್ ರೂಟ್ ಅನ್ನು ಕ್ಲೈಂಟ್ ಪ್ರೊಫೈಲ್ನಿಂದ ಹೊರಗಿಡುತ್ತದೆ: ದೂರದ ಪ್ರಿಫಿಕ್ಸ್ಗಳಿಗೆ route-nopull ಜೊತೆಗೆ ಸ್ಪಷ್ಟ route ಸಾಲುಗಳು, ಇದರಿಂದ ಸ್ಥಳೀಯ ಕೋಷ್ಟಕ ನೀವು ಕೇಳಿದ ಕಡೆ ಮಾತ್ರ ಬದಲಾಗುತ್ತದೆ. ಮುಂದಿನ ಹೆಜ್ಜೆ ಸ್ಥಳೀಯ ಟನೆಲ್ ಸಬ್ನೆಟ್ ಅನ್ನು ವಿನಾಯಿತಿ ಮಾಡುವ ನೀತಿ ನಿಯಮ, ಇದು ಡಿಫಾಲ್ಟ್ ರೂಟ್ ಇದ್ದರೂ ಸ್ಥಳೀಯ ಕ್ಲೈಂಟ್ಗಳಿಗೆ ಉತ್ತರಗಳು ಬಂದ ಇಂಟರ್ಫೇಸ್ನಿಂದಲೇ ಹೊರಡಲು ಬಿಡುತ್ತದೆ. ಅತ್ಯಂತ ಸಮಗ್ರವಾದದ್ದು ಕ್ಲೈಂಟ್ ಪಾತ್ರಕ್ಕೆ ಪ್ರತ್ಯೇಕ ನೆಟ್ವರ್ಕ್ ನೇಮ್ಸ್ಪೇಸ್, ಅದು ಹಂಚಿಕೊಂಡ ಕೋಷ್ಟಕವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ ಮತ್ತು ನಿರ್ವಹಿಸಲು ಎರಡನೇ ರೂಟಿಂಗ್ ಸಂದರ್ಭ ಬೇಕಾಗುತ್ತದೆ.
ನೀವು ಯಾವ ದಾರಿ ತೆಗೆದುಕೊಂಡರೂ, ವಿನಾಯಿತಿ LAN ಅಲ್ಲ, ಸ್ಥಳೀಯ ಟನೆಲ್ ಸಬ್ನೆಟ್ ಅನ್ನು ಹೆಸರಿಸಬೇಕು. ಸ್ಥಳೀಯ ಸರ್ವರ್ ಕಳುಹಿಸುವ ಉತ್ತರದ ಗಮ್ಯಸ್ಥಾನ ಟನೆಲ್ ವಿಳಾಸ, ಆದ್ದರಿಂದ LAN ಆಕಾರದ ವಿನಾಯಿತಿ ಅದಕ್ಕೆ ಎಂದಿಗೂ ಹೊಂದುವುದಿಲ್ಲ.
ಎರಡು ಇನ್ಸ್ಟಾನ್ಸ್ಗಳಲ್ಲಿ ಯಾವುದು ತಪ್ಪಿತಸ್ಥ
ಕ್ಲೈಂಟ್ ಇನ್ಸ್ಟಾನ್ಸ್ ನಿಲ್ಲಿಸಿ ಮೂಲ ಕ್ಲೈಂಟ್ಗಳನ್ನು ಮತ್ತೆ ಪರೀಕ್ಷಿಸಿ. ತಕ್ಷಣದ ಚೇತರಿಕೆ ಎಂದರೆ ರೂಟಿಂಗ್, ಸರ್ವರ್ ಅಲ್ಲ. ಕ್ಲೈಂಟ್ ಮರಳಿ ತಂದು ip route get ಬಳಸಿ ಒಂದೇ ಉತ್ತರವನ್ನು ಟ್ರೇಸ್ ಮಾಡಿ, ಅದಕ್ಕೆ ಮೂಲ ಮತ್ತು ಗಮ್ಯಸ್ಥಾನ ಎರಡೂ ವಿಳಾಸಗಳನ್ನು ನೀಡಲಾಗಿದೆ, ಇದು ಕರ್ನಲ್ ಆಯ್ಕೆ ಮಾಡುವ ಮಾರ್ಗವನ್ನು ತೋರಿಸುತ್ತದೆ, ನಂತರ ಪ್ಯಾಕೆಟ್ಗಳು ನಿಜವಾಗಿ ಯಾವ ಇಂಟರ್ಫೇಸ್ ಬಳಸುತ್ತವೆ ಎಂಬುದನ್ನು tcpdump -ni any port 1194 ನಿಂದ ನೋಡಿ. ಸರ್ವರ್ನ ಸ್ಥಿತಿ ಫೈಲ್, ಪ್ರತಿ ಕೆಲವು ಸೆಕೆಂಡುಗಳಿಗೊಮ್ಮೆ status ನಿರ್ದೇಶದ ಮೂಲಕ ಬರೆಯಲ್ಪಡುತ್ತದೆ, ಸಂಪರ್ಕಗೊಂಡ ಕ್ಲೈಂಟ್ ಪಟ್ಟಿ ಮತ್ತು ಎರಡೂ ದಿಕ್ಕುಗಳ ಬೈಟ್ ಕೌಂಟರ್ಗಳನ್ನು ಹೊಂದಿದೆ.
ಆ ಕೌಂಟರ್ಗಳನ್ನು ಒಂದಕ್ಕೊಂದು ಎದುರಾಗಿ ಓದಿ. ಹೊರಟು ಎಂದಿಗೂ ಹಿಂತಿರುಗದ ಸಂಚಾರ ಹ್ಯಾಂಡ್ಶೇಕ್ ಸಮಸ್ಯೆ ಅಲ್ಲ, ರೂಟಿಂಗ್ ಉತ್ತರ.