OpenVPN ಕ್ಲೈಂಟ್ನ ಹಿಂದಿನ ಸಬ್ನೆಟ್ ಏಕೆ ತಲುಪಲಾಗದಾಗಿದೆ?
OpenVPN ಯಾವ ಕ್ಲೈಂಟ್ಗೆ ದೂರದ LAN ಸೇರಿದೆ ಎಂದು ಊಹಿಸಲಾಗದು. ಕ್ಲೈಂಟ್ನ ಫೈಲ್ನಲ್ಲಿನ iroute ನಮೂದು, ಹಿಂತಿರುಗುವ ರೂಟ್ ಮತ್ತು ಫಾರ್ವರ್ಡಿಂಗ್ ಆ ಸಬ್ನೆಟ್ ಅನ್ನು ತಲುಪಲಾಗುವಂತೆ ಮಾಡುತ್ತವೆ.
ಸರ್ವರ್ನ ಟನೆಲ್ ವಿಳಾಸಕ್ಕೆ ping ಯಶಸ್ವಿಯಾಗುತ್ತದೆ, ಕ್ಲೈಂಟ್ನ ಸ್ವಂತ ರೂಟ್ ಟೇಬಲ್ ಸರಿಯಾಗಿ ಕಾಣುತ್ತದೆ, ಮತ್ತು ಆ ಕ್ಲೈಂಟ್ನ ಹಿಂದಿನ LAN ಇನ್ನೂ ತಲುಪಲಾಗದಾಗಿದೆ. ಕ್ಲೈಂಟ್ನ ರೂಟಿಂಗ್ ಟೇಬಲ್ ಸರಿಯಾಗಿ ಕಾಣುತ್ತದೆ, ಸರ್ವರ್ನಲ್ಲಿ ಟನೆಲ್ನತ್ತ ತೋರಿಸುವ ರೂಟ್ ಇದೆ, ಮತ್ತು ಪ್ಯಾಕೆಟ್ಗಳು ಇನ್ನೂ ಮಾಯವಾಗುತ್ತವೆ. ಇದು layer-3 ಟನೆಲ್ನ ಶಾಸ್ತ್ರೀಯ ಲಕ್ಷಣ, ಅದರ ಒಂದು ಕ್ಲೈಂಟ್ ಕೂಡ ಗೇಟ್ವೇ ಆಗಿದೆ ಎಂದು ಅದಕ್ಕೆ ತಿಳಿದಿಲ್ಲ.
tun ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಪ್ರತಿ ಕ್ಲೈಂಟ್ಗೆ ಮುಂದಿನ ಹಾಪ್ ಇಲ್ಲ. ಕರ್ನೆಲ್ ಅನೇಕ ಪೀರ್ಗಳಿರುವ ಒಂದೇ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ನೋಡುತ್ತದೆ, ಆದ್ದರಿಂದ ದೂರದ LANಗೆ ಯಾವ ಕ್ಲೈಂಟ್ ಪ್ಯಾಕೆಟ್ ಪಡೆಯಬೇಕು ಎಂಬ ನಿರ್ಣಯವನ್ನು OpenVPN ಪ್ರಕ್ರಿಯೆಯ ಒಳಗೆ ತೆಗೆದುಕೊಳ್ಳಬೇಕು. ಆ ನಿರ್ಣಯವನ್ನು iroute ನಿಂದ ಸಂರಚಿಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಅದಿಲ್ಲದೆ ಪ್ಯಾಕೆಟ್ಗೆ ಹೋಗಲು ಸ್ಥಳವಿಲ್ಲ.
ಸರ್ವರ್ ಇಂಟರ್ಫೇಸ್ನಿಂದ ಅಲ್ಲ, ಕ್ಲೈಂಟ್ನಿಂದ ರೂಟ್ ಮಾಡುತ್ತದೆ
ಸರ್ವರ್ ಕ್ಲೈಂಟ್ನ ಟನೆಲ್ ವಿಳಾಸಕ್ಕೆ ಪ್ಯಾಕೆಟ್ ಕಳುಹಿಸಬೇಕಾದಾಗ, ಉತ್ತರ ನಿಸ್ಸಂದಿಗ್ಧ: ವಿಳಾಸವು ಆ ಕ್ಲೈಂಟ್ನ ಸೆಷನ್ಗೆ ಸೇರಿದೆ. ಗಮ್ಯವು ಆ ಕ್ಲೈಂಟ್ನ ಹಿಂದಿನ ಸಂಪೂರ್ಣ ಸಬ್ನೆಟ್ ಆದಾಗ, ವಿಳಾಸವು ಸರ್ವರ್ಗೆ ತಿಳಿದ ಯಾರಿಗೂ ಸೇರಿಲ್ಲ, ಮತ್ತು ಟನೆಲ್ನತ್ತ ಕರ್ನೆಲ್ನ ರೂಟ್ ಕೇವಲ "ಈ ಇಂಟರ್ಫೇಸ್ ಮೂಲಕ" ಎನ್ನುತ್ತದೆ, ಯಾವ ಪೀರ್ ಎಂದು ಹೇಳುವುದಿಲ್ಲ.
OpenVPN ಇದನ್ನು ಗಮ್ಯ ಪೂರ್ವಪ್ರತ್ಯಯವನ್ನು ನಿರ್ದಿಷ್ಟ ಕ್ಲೈಂಟ್ಗೆ ನಕ್ಷೆ ಮಾಡುವ ಆಂತರಿಕ ರೂಟಿಂಗ್ ಟೇಬಲ್ನಿಂದ ಪರಿಹರಿಸುತ್ತದೆ. ಆ ಟೇಬಲ್ iroute ನಮೂದುಗಳಿಂದ ನಿರ್ಮಿಸಲ್ಪಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಸರ್ವರ್ ಹೋಸ್ಟ್ನಲ್ಲಿ ಸಾಮಾನ್ಯ ರೂಟ್ ಸಾಕಾಗುವುದಿಲ್ಲ. ಕರ್ನೆಲ್ ರೂಟ್ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಟನೆಲ್ ಇಂಟರ್ಫೇಸ್ಗೆ ತರುತ್ತದೆ; ಆಂತರಿಕ ನಕ್ಷೆ ಯಾವ ಸೆಷನ್ ಅದನ್ನು ಪಡೆಯುತ್ತದೆ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದಲೇ ದುರಸ್ತಿ ಕರ್ನೆಲ್ನ ರೂಟ್ ಔಟ್ಪುಟ್ನಲ್ಲಿ ಎಂದೂ ಕಾಣಿಸುವುದಿಲ್ಲ.
ನಕ್ಷೆ ಇಲ್ಲದಿದ್ದರೆ, ಪ್ಯಾಕೆಟ್ ಸರ್ವರ್ಗೆ ತಲುಪುತ್ತದೆ, ಟನೆಲ್ ರೂಟ್ಗೆ ಹೊಂದುತ್ತದೆ ಮತ್ತು ಯಾವುದೇ ಕ್ಲೈಂಟ್ ಗಮ್ಯವನ್ನು ಕ್ಲೇಮ್ ಮಾಡದ ಕಾರಣ ತಿರಸ್ಕರಿಸಲ್ಪಡುತ್ತದೆ. ಯಾವುದೂ ಸ್ಪಷ್ಟ ದೋಷವನ್ನು ದಾಖಲಿಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ವೈಫಲ್ಯವು ರೂಟಿಂಗ್ ಲೂಪ್ನಂತೆ ಅಲ್ಲ, ಶಾಂತ ಕಪ್ಪು ಕುಳಿಯಂತೆ ಕಾಣುತ್ತದೆ.
ಕ್ಲೈಂಟ್ನ ಹೆಸರು ಹೇಳುವ iroute ನಮೂದನ್ನು ಬರೆಯುವುದು
iroute ಸರ್ವರ್ನ ಮುಖ್ಯ ಸಂರಚನೆಯಲ್ಲ, ಕ್ಲೈಂಟ್-ನಿರ್ದಿಷ್ಟ ಸಂರಚನಾ ಫೈಲ್ನಲ್ಲಿದೆ. client-config-dir ಆಯ್ಕೆಯೊಂದಿಗೆ ಸರ್ವರ್ ಅನ್ನು ಒಂದು ಡೈರೆಕ್ಟರಿಗೆ ನಿರ್ದೇಶಿಸಿ, ನಂತರ ಕ್ಲೈಂಟ್ನ ಪ್ರಮಾಣಪತ್ರದ ಸಾಮಾನ್ಯ ಹೆಸರನ್ನು ಹೊಂದಿರುವ ಫೈಲ್ ರಚಿಸಿ ಮತ್ತು ಪೂರ್ವಪ್ರತ್ಯಯವನ್ನು ಅದರೊಳಗೆ ಇರಿಸಿ.
LAN 10.20.0.0/24 ಆಗಿರುವ ಮತ್ತು ಪ್ರಮಾಣಪತ್ರದ ಸಾಮಾನ್ಯ ಹೆಸರು branch-router ಆಗಿರುವ ಶಾಖೆಗೆ, ಆ ಮಾರ್ಗದಲ್ಲಿನ ಫೈಲ್ iroute 10.20.0.0 255.255.255.0 ನಂತಹ ಸಾಲನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಮುಖ್ಯ ಸಂರಚನೆಗೆ ಡೈರೆಕ್ಟರಿ ಆಯ್ಕೆ ಮಾತ್ರ ಬೇಕು; ಪೂರ್ವಪ್ರತ್ಯಯ ಕ್ಲೈಂಟ್ನಲ್ಲಿದೆ.
ಸಾಮಾನ್ಯ ಹೆಸರೇ ಸೂಕ್ಷ್ಮ ಭಾಗ. ಬೇರೆ subject ನೊಂದಿಗೆ ನೀಡಿದ ಪ್ರಮಾಣಪತ್ರ, ಅಥವಾ ಬಳಕೆದಾರರನ್ನು ಬಳಕೆದಾರಹೆಸರಿನಿಂದ ದೃಢೀಕರಿಸುವ ಆದರೆ ಫೈಲ್ ಪ್ರಮಾಣಪತ್ರದ ಹೆಸರಿನಲ್ಲಿರುವ ನಿಯೋಜನೆ, ಎಂದೂ ಓದದ ಫೈಲ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಸರ್ವರ್ ಸೆಷನ್ಗೆ ವಾಸ್ತವವಾಗಿ ಯಾವ ಹೆಸರನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ ಎಂದು ಪರಿಶೀಲಿಸಿ, ಮತ್ತು ಹೊಂದಿಕೆಯಾಗದ ಕ್ಲೈಂಟ್ ತನ್ನ ರೂಟ್ಗಳಿಲ್ಲದೆ ಸದ್ದಿಲ್ಲದೆ ಸಂಪರ್ಕಗೊಳ್ಳುವ ಬದಲು ವಿಫಲವಾಗಲು ಅನುವು ಮಾಡುವ ಆಯ್ಕೆಯನ್ನು ಪರಿಗಣಿಸಿ. ಪ್ರಮಾಣಪತ್ರಕ್ಕೆ ಹೊಂದುವಂತೆ ಫೈಲ್ ಮರುನಾಮಕರಣ ಮಾಡುವುದು ಬಹಳ ಉದ್ದದ ಸಂಜೆಯನ್ನು ತಡೆಯುವ ಐದು ನಿಮಿಷಗಳ ಸರಿಪಡಿಸುವಿಕೆ.
ಒಂದು ಕ್ಲೈಂಟ್ ಹಲವಾರು ಪೂರ್ವಪ್ರತ್ಯಯಗಳನ್ನು ಹೊಂದಬಹುದು. ಪ್ರತಿ ನೆಟ್ವರ್ಕ್ಗೆ ಒಂದು iroute ಸಾಲನ್ನು ಸೇರಿಸಿ ಮತ್ತು ನಕ್ಷೆ ಲೆಕ್ಕಪರಿಶೋಧನೀಯವಾಗಿ ಉಳಿಯಲು ಪಟ್ಟಿಯನ್ನು ಆ ಕ್ಲೈಂಟ್ನ ಉಳಿದ ಸೆಟ್ಟಿಂಗ್ಗಳ ಪಕ್ಕದಲ್ಲಿ ಇರಿಸಿ.
ಎರಡೂ ದಿಕ್ಕುಗಳಲ್ಲಿ ಹಿಂತಿರುಗುವ ಮಾರ್ಗವನ್ನು ನಿರ್ಮಿಸುವುದು
ದೂರದ LANಗೆ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ತಲುಪಿಸುವುದು ಅರ್ಧ ಕೆಲಸ. ಕ್ಲೈಂಟ್ ಆ LANನ ಸಂಚಾರವನ್ನೂ ಟನೆಲ್ಗೆ ಕಳುಹಿಸಬೇಕು, ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಕ್ಲೈಂಟ್ಗೆ ರೂಟ್ ಪುಷ್ ಮಾಡುವ ಮೂಲಕ ಮಾಡಲಾಗುತ್ತದೆ: push "route 10.8.0.0 255.255.255.0" ನಂತಹ ಸಾಲು ಪ್ರತಿ ಕ್ಲೈಂಟ್ಗೆ ಸರ್ವರ್ ಬದಿಯ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಹೇಗೆ ತಲುಪುವುದು ಎಂದು ಹೇಳುತ್ತದೆ. ಶಾಖೆಗೆ, ಸಮಾನವಾದ ರೂಟ್ ಸರ್ವರ್ ಬದಿಯಲ್ಲಿ ತಲುಪಬೇಕಾದ ಎಲ್ಲದಕ್ಕೂ ಟನೆಲ್ನತ್ತ ತೋರಿಸುತ್ತದೆ.
ಹಿಂತಿರುಗುವ ದಿಕ್ಕಿಗೆ ದೂರದ ಬದಿಯಲ್ಲಿ ಮಾಲೀಕ ಬೇಕು. ಆ ಬದಿಯಲ್ಲಿ ಯಾರಾದರೂ ಹಿಂತಿರುಗುವ ದಾರಿಯನ್ನು ತಿಳಿದಿರಬೇಕು: VPN ಪೂಲ್ ಅನ್ನು ಸರ್ವರ್ನತ್ತ ತೋರಿಸುವ LAN ರೂಟರ್ನಲ್ಲಿನ ಸ್ಥಿರ ರೂಟ್, ಅಥವಾ ಸಂಚಾರ LAN ಪ್ರವೇಶಿಸುವ ಮೊದಲು ಸರ್ವರ್ನಲ್ಲಿ ವಿಳಾಸ ಅನುವಾದ. ಸ್ಥಿರ ರೂಟ್ ಮೂಲ ವಿಳಾಸಗಳನ್ನು ಲಾಗ್ಗಳು ಮತ್ತು ಪ್ರವೇಶ ನಿಯಮಗಳಲ್ಲಿ ಗೋಚರವಾಗಿ ಇರಿಸುತ್ತದೆ ಆದರೆ LAN ಮಾಲೀಕನ ಸಹಕಾರ ಅಗತ್ಯ; ಅನುವಾದ ಸ್ವಯಂಪೂರ್ಣ ಆದರೆ ವಾಸ್ತವವಾಗಿ ಯಾರು ಸಂಪರ್ಕಿಸಿದರು ಎಂಬುದನ್ನು ಮರೆಮಾಡುತ್ತದೆ.
ಸರ್ವರ್ ಹೋಸ್ಟ್ನಲ್ಲಿ ಫಾರ್ವರ್ಡಿಂಗ್ ಸಕ್ರಿಯವಾಗಿರಬೇಕು. ಅದಿಲ್ಲದೆ ಕರ್ನೆಲ್ ಟನೆಲ್ನಿಂದ ಪ್ಯಾಕೆಟ್ ಸ್ವೀಕರಿಸಿ ಅದನ್ನು LAN ಇಂಟರ್ಫೇಸ್ಗೆ ರವಾನಿಸಲು ನಿರಾಕರಿಸುತ್ತದೆ, ಇದು ಕ್ಲೈಂಟ್ನ ದೃಷ್ಟಿಯಿಂದ ಕಾಣೆಯಾದ iroute ನಂತೆಯೇ ಕಾಣುತ್ತದೆ.
ಸರಿಯಾದ ಪ್ರೋಬ್ಗಳಿಂದ ತಲುಪುವಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸುವುದು
ದೂರದ ತುದಿಗೆ ping ಮಾಡಿ ಊಹಿಸುವ ಬದಲು ಪದರಗಳಲ್ಲಿ ಪರೀಕ್ಷಿಸಿ. ಸರ್ವರ್ನಿಂದ ಪೂರ್ವಪ್ರತ್ಯಯಕ್ಕೆ ಆಂತರಿಕ ನಕ್ಷೆ ಇದೆ ಮತ್ತು ಕರ್ನೆಲ್ ರೂಟ್ ಟನೆಲ್ನತ್ತ ತೋರಿಸುತ್ತದೆ ಎಂದು ಪರಿಶೀಲಿಸಿ. ಕ್ಲೈಂಟ್ನಿಂದ ಪುಷ್ ಮಾಡಿದ ರೂಟ್ ಸ್ಥಾಪನೆಯಾಗಿದೆ ಮತ್ತು LAN ವಿಳಾಸಕ್ಕೆ ಅದರ ಡೀಫಾಲ್ಟ್ ಮಾರ್ಗ ಟನೆಲ್ ಎಂದು ದೃಢೀಕರಿಸಿ.
ನಂತರ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಗಮನಿಸಿ. ಟನೆಲ್ ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಸೆರೆಹಿಡಿಯುವಿಕೆ ಸರ್ವರ್ ಕ್ಲೈಂಟ್ನತ್ತ ಕಳುಹಿಸುತ್ತಿದೆಯೇ ಎಂದು ತೋರಿಸುತ್ತದೆ, ಮತ್ತು LAN ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಸೆರೆಹಿಡಿಯುವಿಕೆ ಅದು ಫಾರ್ವರ್ಡ್ ಮಾಡುತ್ತಿದೆಯೇ ಎಂದು ತೋರಿಸುತ್ತದೆ. ಮೊದಲನೆಯದು ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ತೋರಿಸಿ ಎರಡನೆಯದು ಏನನ್ನೂ ತೋರಿಸದಿದ್ದರೆ, ಸಮಸ್ಯೆ ಫಾರ್ವರ್ಡಿಂಗ್ ಅಥವಾ ಫಿಲ್ಟರ್ನಲ್ಲಿದೆ; ಎರಡೂ ಏನನ್ನೂ ತೋರಿಸದಿದ್ದರೆ, ಹುಡುಕಾಟ ಮೊದಲೇ ವಿಫಲವಾಗಿದೆ.
ಟನೆಲ್ನಿಂದ ಸಂಪರ್ಕಿಸಲಾದ ಎರಡು ಸರ್ವರ್ಗಳು ಎರಡೂ ಬದಿಗಳಲ್ಲಿ ಅದೇ ನಿಯಮವನ್ನು ಪುನರಾವರ್ತಿಸುತ್ತವೆ: ಪ್ರತಿಯೊಂದಕ್ಕೂ ಇನ್ನೊಂದರ ಪೂಲ್ಗೆ iroute ಬೇಕು, ಮತ್ತು ಪ್ರತಿಯೊಂದಕ್ಕೂ ಮಾರ್ಗವನ್ನು ಸಮ್ಮಿತೀಯಗೊಳಿಸುವ ರೂಟ್ ಮತ್ತು ಫಾರ್ವರ್ಡಿಂಗ್ ಬೇಕು. ಇಲ್ಲಿ ರೂಟಿಂಗ್ ಮತ್ತು ನೀತಿ ಪ್ರತ್ಯೇಕ ವಿಷಯಗಳು. ರೂಟಿಂಗ್ ಪ್ಯಾಕೆಟ್ ಎಲ್ಲಿಗೆ ಹೋಗಬಹುದು ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಆದರೆ FORWARD ನಿಯಮ ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಎರಡು iroute ಸಾಲುಗಳಿರುವ ಕ್ಲೈಂಟ್ ಫಿಲ್ಟರ್ ಬೇರೆ ಹೇಳದಿದ್ದರೆ ಎರಡೂ ಪೂರ್ವಪ್ರತ್ಯಯಗಳನ್ನು ತಲುಪಬಹುದು.