ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ಪ್ರತ್ಯೇಕ ಪರಿಶೀಲನೆಗಳೊಂದಿಗೆ ಹಲವು vpnc ಸುರಂಗಗಳನ್ನು ಚಾಲನೆಯಲ್ಲಿಡಿ
ಪ್ಯಾಕೇಜಿನೊಂದಿಗೆ ಬರುವ ಮರುಸಂಪರ್ಕ ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದೇ ಸುರಂಗವನ್ನು ಊಹಿಸುತ್ತದೆ. ಪ್ರತಿ vpnc ಪ್ರೊಫೈಲಿಗೆ ಅದರದೇ ಪೋರ್ಟ್ ನೀಡಿ, ನಿಜವಾದ ಸೇವೆಯನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪರಿಶೀಲನೆಗಳನ್ನು ಒಂದೇ ನಿಶ್ಚಿತ ಕ್ರಮದಲ್ಲಿ ಸರಪಳಿಗೊಳಿಸಿ.
ಒಂದು vpnc ಪ್ರೊಫೈಲ್ ರೋಮಿಂಗ್ ನಂತರ ಸ್ವಚ್ಛವಾಗಿ ಮರುಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ; ಮೂರರಲ್ಲಿ ಪರ್ಯಾಯವಾಗಿ ಪರಸ್ಪರ ಸಾಕೆಟ್, ರೂಟ್ ಮತ್ತು ರಿಸಾಲ್ವರ್ ಸ್ಥಿತಿಯನ್ನು ಒಡೆಯುತ್ತವೆ. ಪ್ಯಾಕೇಜಿನೊಂದಿಗೆ ಬರುವ ಮರುಸಂಪರ್ಕ ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದೇ ಸುರಂಗಕ್ಕೆ ಬರೆಯಲಾಗಿದೆ, ಆದ್ದರಿಂದ ಅವುಗಳಲ್ಲಿ ಯಾವುದಾದರೂ ಕೆಳಗಿದ್ದಾಗ ಅದು ಪ್ರತಿ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಇದನ್ನು ಸರಿಪಡಿಸಲು ಮೂರು ವಿಷಯಗಳು ಬೇಕು: ಪ್ರತ್ಯೇಕ ಸ್ಥಳೀಯ ಪೋರ್ಟುಗಳು, ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ನಿಜವಾದ ಸೇವೆಯನ್ನು ಪರೀಕ್ಷಿಸುವ ಪರಿಶೀಲನೆ, ಮತ್ತು ಎರಡು ಸಂಪರ್ಕಗಳನ್ನು ಎಂದಿಗೂ ಜೊತೆಯಾಗಿ ಓಡಿಸದ ಒಂದು ಕ್ರಮಬದ್ಧ ಸರಪಳಿ.
ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ಅದರದೇ ಸ್ಥಳೀಯ ಪೋರ್ಟ್ ನೀಡಿ
ಡಿಫಾಲ್ಟ್ ಸ್ಥಳೀಯ ಪೋರ್ಟಿನಲ್ಲಿ ಬಿಟ್ಟ vpnc ಪ್ರೊಫೈಲ್ ಈಗಾಗಲೇ ಚಾಲನೆಯಲ್ಲಿರುವ ಪ್ರೊಫೈಲ್ ಜೊತೆ ಸ್ಪರ್ಧಿಸುತ್ತದೆ. ಮೊದಲನೆಯದು ಪೋರ್ಟ್ ಹಿಡಿದಿರುವಾಗ ಎರಡನೆಯ ಸಂಪರ್ಕ ವಿಫಲವಾಗುತ್ತದೆ, ಮತ್ತು ಲಾಗ್ ಸಾಲು ಸ್ಥಳೀಯ ಘರ್ಷಣೆಯ ಬದಲು ಗೇಟ್ವೇ ಸಮಸ್ಯೆಯಂತೆ ಕಾಣುತ್ತದೆ. ಬದಲಾಗಿ ಪ್ರತಿ ಪ್ರೊಫೈಲ್ ಫೈಲಿಗೂ ಒಂದು ಸಾಲು ಹಾಕಿ:
Local Port 0ಸೊನ್ನೆ ಕರ್ನಲ್ಗೆ ತಾತ್ಕಾಲಿಕ ಪೋರ್ಟ್ ಆಯ್ಕೆ ಮಾಡಲು ಬಿಡುತ್ತದೆ, ಹಾಗಾಗಿ ಎರಡು ಪ್ರೊಫೈಲ್ಗಳನ್ನು ಒಟ್ಟಿಗೆ ಸ್ಥಾಪಿಸಬಹುದು. ಪ್ರತಿ ಫೈಲಿಗೂ ಅದು ಸೇವೆ ಸಲ್ಲಿಸುವ ಗೇಟ್ವೇ ಮತ್ತು ಗುಂಪಿನ ಹೆಸರು ಕೊಡಿ, ಅದನ್ನು root ಗೆ ಮಾತ್ರ ಓದಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಇರಿಸಿ, ಮತ್ತು ಯಾವಾಗಲೂ ಹಂಚಿದ ಡಿಫಾಲ್ಟ್ ಬದಲು ಹೊಂದಿಕೆಯಾಗುವ ಪ್ರೊಫೈಲ್ ಜೊತೆ ಸಂಪರ್ಕಿಸಿ. ಹಂಚಿದ ಡಿಫಾಲ್ಟ್ ಫೈಲ್ ಎಂದರೆ ಯಾರಾದರೂ ಪ್ರೊಫೈಲ್ ಹೆಸರು ಬದಲಿಸಿದ ನಂತರ ಸ್ಕ್ರಿಪ್ಟ್ ತಪ್ಪು ಸುರಂಗವನ್ನು ಮರುಸಂಪರ್ಕಿಸುವ ದಾರಿ.
ಪ್ರೊಫೈಲ್ ಫೈಲುಗಳು ರುಜುವಾತುಗಳನ್ನು ಹೊತ್ತಿರುತ್ತವೆ, ಆದ್ದರಿಂದ ಅನುಮತಿಗಳು ವಿನ್ಯಾಸದ ಭಾಗ, ಮನೆಗೆಲಸದ್ದಲ್ಲ. /etc/vpnc ಅಡಿಯಲ್ಲಿ ಎಲ್ಲರೂ ಓದಬಹುದಾದ ಫೈಲ್ ಗುಂಪಿನ ರಹಸ್ಯವನ್ನು ಪ್ರತಿ ಸ್ಥಳೀಯ ಬಳಕೆದಾರರಿಗೂ ಕೊಡುತ್ತದೆ. ಮೋಡ್ 0600 ಇರಿಸಿ ಮತ್ತು ಮಾಲೀಕ root ಇರಲಿ, ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟುಗಳು ರಹಸ್ಯಗಳನ್ನು ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳಿಗೆ ನಕಲಿಸುವ ಬದಲು ಫೈಲ್ ಅನ್ನು root ಆಗಿ ಓದಲಿ. ಅದಕ್ಕೇ ಪರಿಶೀಲನಾ ಸ್ಕ್ರಿಪ್ಟ್ ಎಂದಿಗೂ ಫೈಲಿನ ವಿಷಯವನ್ನು ಲಾಗ್ಗೆ ಬರೆಯಬಾರದು.
ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ಒಂದು ಸೇವೆಯನ್ನು ಪರಿಶೀಲಿಸಿ, ಸುರಂಗದ ವಿಳಾಸವನ್ನಲ್ಲ
ಸುರಂಗದ ಸ್ವಂತ ವಿಳಾಸಕ್ಕೆ ಹೋಗುವ ಎಕೋ ವಿನಂತಿ ಹೆಚ್ಚಾಗಿ ಇಂಟರ್ಫೇಸ್ ಇದೆ ಎಂಬುದನ್ನಷ್ಟೇ ಸಾಬೀತುಪಡಿಸುತ್ತದೆ. ಅದರ ಹಿಂದಿನ ಹೋಸ್ಟ್ ಸುರಂಗವನ್ನು ಸಮರ್ಥಿಸುವ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಇನ್ನೂ ತಲುಪುತ್ತದೆಯೇ ಎಂದು ಅದು ಏನೂ ಹೇಳುವುದಿಲ್ಲ. ಇಂಟರ್ಫೇಸ್ ಮೇಲಿದ್ದರೂ ಅದರ ಆಚೆಯ ರೂಟ್ ಈಗಾಗಲೇ ಹೋಗಿರಬಹುದು.
ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ಒಂದು ಸೇವೆಯನ್ನು ಸಣ್ಣ TCP ಕಾಲಮಿತಿಯೊಂದಿಗೆ ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪರಿಶೀಲನೆ ವಿಫಲವಾದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಮಾತ್ರ ಮರುಸಂಪರ್ಕಿಸಿ. ಎರಡು ಸೆಕೆಂಡು ಸತ್ತ ದಾರಿಯನ್ನು ನಿಧಾನ ದಾರಿಯಿಂದ ಬೇರ್ಪಡಿಸುತ್ತದೆ, ಮತ್ತು TCP ಪರಿಶೀಲನೆ ದಾರಿಯಲ್ಲಿ ಎಲ್ಲಾದರೂ ICMP ಗೆ ಅನುಮತಿ ಇದೆಯೇ ಎಂಬುದನ್ನು ಅವಲಂಬಿಸಿಲ್ಲ. ಪ್ರೊಫೈಲ್ಗಳ ನಡುವೆ ಗುರಿ ಮತ್ತು ಕಾನ್ಫಿಗ್ ಹೆಸರನ್ನು ಮಾತ್ರ ಬದಲಿಸಿ:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiಅದನ್ನು /usr/local/bin/ensure-vpn-ops.sh ಆಗಿ ಉಳಿಸಿ, ಚಲಾಯಿಸಬಹುದಾದಂತೆ ಮಾಡಿ, ಮತ್ತು ಪರಿಶೀಲನೆಯ ಗುರಿ ಹಾಗೂ ಕಾನ್ಫಿಗ್ ಹೆಸರನ್ನು ಮಾತ್ರ ಬದಲಿಸಿ ಪ್ರತಿ ಪ್ರೊಫೈಲಿಗೂ ಪುನರಾವರ್ತಿಸಿ. ಪ್ರೋಟೋಕಾಲ್ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರಿಸುವ ಪರಿಶೀಲನೆ, ಎಕೋವನ್ನು ಬಿಸಾಡುತ್ತಿದ್ದರೂ ಬಳಕೆದಾರರಿಗೆ ಮುಖ್ಯವಾದ ಸೇವೆಗಳನ್ನು ಮುಂದೆ ರವಾನಿಸುವ ಗೇಟ್ವೇಗಳನ್ನು ದಾಟಿ ಉಳಿಯುತ್ತದೆ.
ಪರಿಶೀಲನೆಗಳನ್ನು ಎಂದಿಗೂ ಸ್ಪರ್ಧಿಸದಂತೆ ಸರಪಳಿಗೊಳಿಸಿ
ಪ್ಯಾಕೇಜಿನ ಮರುಸಂಪರ್ಕ ಸ್ಕ್ರಿಪ್ಟ್ ನಿಮ್ಮ ಪರಿಶೀಲನೆಗಳನ್ನು ಕ್ರಮವಾಗಿ ಕರೆಯಬಲ್ಲದು, ಮತ್ತು ಕ್ರಮವೇ ಪೂರ್ತಿ ವಿಷಯ. ಜೊತೆಯಾಗಿ ಓಡುವ ಎರಡು vpnc-connect ಕರೆಗಳು ರೂಟಿಂಗ್ ಕೋಷ್ಟಕವನ್ನು ಯಾರೂ ನಿಯಂತ್ರಿಸದ ಕ್ರಮದಲ್ಲಿ ಮತ್ತೆ ಬರೆಯುತ್ತವೆ, ಮತ್ತು ಆ ರೀತಿಯಲ್ಲೇ ಆರೋಗ್ಯಕರ ಪ್ರೊಫೈಲ್ ತನ್ನ ರೂಟ್ ಕಳೆದುಕೊಳ್ಳುತ್ತದೆ.
ಕರೆಗಳನ್ನು ಮುಂಚಿನ ಸಾಲಿನಲ್ಲಿಡಿ, ಕೆಳಗಿನ ಇಂಟರ್ಫೇಸ್ಗೆ ಸಣ್ಣ ಸ್ಥಿರಗೊಳ್ಳುವ ವಿಳಂಬ ಸೇರಿಸಿ, ಮತ್ತು ಸರಪಳಿಯನ್ನು root ನ cron ಕೋಷ್ಟಕದಿಂದ ನಿಗದಿಪಡಿಸಿ, ಏಕೆಂದರೆ ಸುರಂಗದ ರೂಟ್ಗಳನ್ನು ಮತ್ತೆ ಬರೆಯಲು root ಗೆ ಮಾತ್ರ ಸಾಧ್ಯ:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shಬೂಟ್ ಸ್ಕ್ರಿಪ್ಟ್ ಮತ್ತು cron ನಮೂದಿನ ನಡುವೆ ಕ್ರಮವನ್ನು ಒಂದೇ ರೀತಿ ಇರಿಸಿ, ಏಕೆಂದರೆ ಬೂಟ್ ಸಮಯದಲ್ಲಿ ಬೇರೆ ಕ್ರಮದಲ್ಲಿ ಓಡುವ ಸರಪಳಿ ವಾಸ್ತವವಾಗಿ ಬೇರೆ ಪ್ರೋಗ್ರಾಂ. ಒಂದು ಪ್ರೊಫೈಲ್ ಇನ್ನೊಂದರ ರೂಟ್ಗಳನ್ನು ಅವಲಂಬಿಸಿದಾಗ, ಅವಲಂಬನೆಯನ್ನು ಮೊದಲು ಇರಿಸಿ ಮತ್ತು ಹಿಂದಿನ ಸುರಂಗ ಇನ್ನೂ ಮೇಲೇರುವಾಗ ಮುಂದಿನ ಪರಿಶೀಲನೆ ನಿರುಪದ್ರವವಾಗಿ ವಿಫಲವಾಗಲಿ.
ಲಾಗ್ ಗಮನಿಸಿ, ನಂತರ ಒಂದನ್ನು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಒಡೆಯಿರಿ
ಪ್ರತಿ ಸಲದ ಓಟಕ್ಕೂ ಒಂದು ಸಾಲು ದಾಖಲಿಸಿ: ಪ್ರೊಫೈಲ್, ಪರಿಶೀಲನೆಯ ಗುರಿ, ಫಲಿತಾಂಶ ಮತ್ತು ತೆಗೆದುಕೊಂಡ ಕ್ರಮ. ಅದಿಲ್ಲದೆ ಪ್ರತಿ ನಿಮಿಷ ಅಲುಗಾಡುವ ಸುರಂಗ ಎಂದೂ ಬೀಳದ ಸುರಂಗದಂತೆ ಕಾಣುತ್ತದೆ, ಮತ್ತು ಪರಿಶೀಲನೆಯ ದೋಷವನ್ನು ಗೇಟ್ವೇ ಅಡಚಣೆಯಿಂದ ಪ್ರತ್ಯೇಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸರಪಳಿ ವಿಫಲವಾದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಮಾತ್ರ ಮುಟ್ಟಿದೆ ಎಂಬುದನ್ನೂ ಲಾಗ್ ಸಾಬೀತುಪಡಿಸುತ್ತದೆ. ಮರುಪ್ರಾರಂಭವನ್ನು ತಾಳುವ ಜಾಗದಲ್ಲಿ ಬರೆಯಿರಿ, ಇಲ್ಲದಿದ್ದರೆ ಸಾಕ್ಷ್ಯ ಪ್ರಕ್ರಿಯೆಯೊಂದಿಗೆ ಹೋಗುತ್ತದೆ.
ನಂತರ ಸುರಂಗವನ್ನು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಒಡೆದು ಏನಾಗುತ್ತದೆ ಎಂದು ನೋಡಿ. ಒಂದೇ ಪ್ರೊಫೈಲ್ ನಿಲ್ಲಿಸಿ ಮತ್ತು ಯಾವ ಪ್ರಕ್ರಿಯೆಗಳು ಹಾಗೂ ರೂಟ್ಗಳು ಇನ್ನೂ ಇವೆ ಎಂದು ಖಚಿತಪಡಿಸಿ:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logನಿಲ್ಲಿಸಿದ ಪ್ರೊಫೈಲ್ ಮಾತ್ರ ಮರುಸಂಪರ್ಕಗೊಳ್ಳಬೇಕು, ಮತ್ತು ಉಳಿದ ಅವಧಿಗಳು ತಮ್ಮ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಮತ್ತು ರೂಟ್ಗಳನ್ನು ಎರಡನ್ನೂ ಉಳಿಸಿಕೊಳ್ಳಬೇಕು. ಎರಡು ಪ್ರೊಫೈಲ್ಗಳು ಮರುಪ್ರಾರಂಭವಾದರೆ, ನಿಮ್ಮ ಸರಪಳಿ ನೀವು ನಿರೀಕ್ಷಿಸದ ಎಡೆಯಲ್ಲಿ ಸಮಾನಾಂತರವಾಗಿ ಓಡುತ್ತಿದೆ.
ಕಾವಲುಗಾರ ಮಾಡಬಾರದ್ದು
ಏನಾದರೂ ವಿಫಲವಾದಾಗಲೆಲ್ಲ ಎಲ್ಲವನ್ನೂ ಮರುಪ್ರಾರಂಭಿಸುವ ಕಾವಲುಗಾರ ಪರೀಕ್ಷೆಯಲ್ಲಿ ಆರೋಗ್ಯಕರವಾಗಿ ಕಾಣುತ್ತದೆ ಮತ್ತು ನಿರ್ವಹಣಾ ಕಿಟಕಿಯಲ್ಲಿ ಅಡಚಣೆ ಉಂಟುಮಾಡುತ್ತದೆ. ಪ್ರೊಫೈಲ್ ಪ್ರಕಾರ ಮರುಪ್ರಾರಂಭಿಸಿ, ಎಂದಿಗೂ ಜಾಗತಿಕವಾಗಿ ಅಲ್ಲ.
ಅದೇ ಪ್ರೋಟೋಕಾಲಿಗೆ ಗೇಟ್ವೇ ನಿರ್ವಹಿತ ಕ್ಲೈಂಟ್ ನೀಡಿದಾಗ ಅದನ್ನು ಆರಿಸಿ, ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟಿನಲ್ಲಿ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಎಂದಿಗೂ ಹಾರ್ಡ್ಕೋಡ್ ಮಾಡಬೇಡಿ ಅಥವಾ ಆಜ್ಞಾ ಸಾಲಿನಲ್ಲಿ ನೀಡಬೇಡಿ, ಏಕೆಂದರೆ ಪ್ರೊಫೈಲ್ ಫೈಲ್ ಈಗಾಗಲೇ ರಹಸ್ಯವನ್ನು ಹೊಂದಿದೆ. ಸುರಂಗ ಮೇಲೇರಿದ ನಂತರ ಯಾವುದಾದರೂ ಕೆಲಸ ಸಾಮಾನ್ಯ ಬಳಕೆದಾರರಾಗಿ ನಡೆಯಬೇಕಿದ್ದರೆ, ಇಡೀ ಸರಪಳಿಯನ್ನು ಆ ಖಾತೆಯ ಅಡಿಯಲ್ಲಿ ಓಡಿಸುವ ಬದಲು ಸ್ಕ್ರಿಪ್ಟಿನ ಒಳಗಿನಿಂದಲೇ ವಿಶೇಷಾಧಿಕಾರಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಿ. ಕೊನೆಯದಾಗಿ, ಮರುಸಂಪರ್ಕದ ನಂತರ ರೂಟ್ಗಳನ್ನು ಮತ್ತೆ ಓದಿ, ಏಕೆಂದರೆ ಪ್ರೊಫೈಲ್ ಬೇರೆ ನಿಗದಿಪಡಿಸಿದ ವಿಳಾಸದೊಂದಿಗೆ ಮರಳಿ ಬಂದು, ಸುರಂಗದ ವಿಳಾಸದ ಕಡೆಗಿನ ಯಾವ ಪರಿಶೀಲನೆಯೂ ಎಂದಿಗೂ ಗಮನಿಸದ ಹಳೆಯ ರೂಟ್ ಬಿಟ್ಟುಹೋಗಬಹುದು.