DNSTap ಮತ್ತು BGP ಜೊತೆಗೆ ILV ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಬೈಪಾಸ್ ಮಾಡಿ

DNSTap ಮತ್ತು BGP ಜೊತೆಗೆ ILV ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಬೈಪಾಸ್ ಮಾಡಿ

ವಿಷಯವು ಸಾಕಷ್ಟು ಸೋಲಿಸಲ್ಪಟ್ಟಿದೆ, ನನಗೆ ತಿಳಿದಿದೆ. ಉದಾಹರಣೆಗೆ, ಒಂದು ಮಹಾನ್ ಇದೆ ಲೇಖನ, ಆದರೆ ಬ್ಲಾಕ್‌ಲಿಸ್ಟ್‌ನ IP ಭಾಗವನ್ನು ಮಾತ್ರ ಅಲ್ಲಿ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ನಾವು ಡೊಮೇನ್‌ಗಳನ್ನು ಕೂಡ ಸೇರಿಸುತ್ತೇವೆ.

ನ್ಯಾಯಾಲಯಗಳು ಮತ್ತು RKN ಎಲ್ಲವನ್ನೂ ಬಲ ಮತ್ತು ಎಡಕ್ಕೆ ನಿರ್ಬಂಧಿಸುತ್ತದೆ, ಮತ್ತು ಪೂರೈಕೆದಾರರು Revizorro ಹೊರಡಿಸಿದ ದಂಡದ ಅಡಿಯಲ್ಲಿ ಬೀಳದಂತೆ ಶ್ರಮಿಸುತ್ತಿದ್ದಾರೆ ಎಂಬ ಅಂಶದಿಂದಾಗಿ, ನಿರ್ಬಂಧಿಸುವಿಕೆಯಿಂದ ಸಂಬಂಧಿಸಿದ ನಷ್ಟಗಳು ಸಾಕಷ್ಟು ದೊಡ್ಡದಾಗಿದೆ. ಮತ್ತು "ಕಾನೂನುಬದ್ಧವಾಗಿ" ನಿರ್ಬಂಧಿಸಲಾದ ಸೈಟ್‌ಗಳಲ್ಲಿ ಅನೇಕ ಉಪಯುಕ್ತವಾದವುಗಳಿವೆ (ಹಲೋ, ರುಟ್ರಾಕರ್)

ನಾನು RKN ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ವಾಸಿಸುತ್ತಿದ್ದೇನೆ, ಆದರೆ ನನ್ನ ಪೋಷಕರು, ಸಂಬಂಧಿಕರು ಮತ್ತು ಸ್ನೇಹಿತರು ಮನೆಯಲ್ಲಿಯೇ ಇದ್ದರು. ಆದ್ದರಿಂದ, ಐಟಿಯಿಂದ ದೂರವಿರುವ ಜನರಿಗೆ ತಡೆಯುವಿಕೆಯನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು ಸುಲಭವಾದ ಮಾರ್ಗದೊಂದಿಗೆ ಬರಲು ನಿರ್ಧರಿಸಲಾಯಿತು, ಮೇಲಾಗಿ ಅವರ ಭಾಗವಹಿಸುವಿಕೆ ಇಲ್ಲದೆ.

ಈ ಟಿಪ್ಪಣಿಯಲ್ಲಿ, ನಾನು ಮೂಲಭೂತ ನೆಟ್ವರ್ಕ್ ವಿಷಯಗಳನ್ನು ಹಂತಗಳಲ್ಲಿ ವಿವರಿಸುವುದಿಲ್ಲ, ಆದರೆ ಈ ಯೋಜನೆಯನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಎಂಬುದರ ಸಾಮಾನ್ಯ ತತ್ವಗಳನ್ನು ವಿವರಿಸುತ್ತೇನೆ. ಆದ್ದರಿಂದ ನೆಟ್‌ವರ್ಕ್ ಸಾಮಾನ್ಯವಾಗಿ ಮತ್ತು ನಿರ್ದಿಷ್ಟವಾಗಿ ಲಿನಕ್ಸ್‌ನಲ್ಲಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬ ಜ್ಞಾನವನ್ನು ಹೊಂದಿರಬೇಕು.

ಬೀಗಗಳ ವಿಧಗಳು

ಮೊದಲಿಗೆ, ಯಾವುದನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಎಂಬುದರ ಕುರಿತು ನಮ್ಮ ಸ್ಮರಣೆಯನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡೋಣ.

RKN ನಿಂದ ಅನ್‌ಲೋಡ್ ಮಾಡಲಾದ XML ನಲ್ಲಿ ಹಲವಾರು ರೀತಿಯ ಲಾಕ್‌ಗಳಿವೆ:

  • IP
  • ಡೊಮೇನ್
  • URL ಅನ್ನು

ಸರಳತೆಗಾಗಿ, ನಾವು ಅವುಗಳನ್ನು ಎರಡಕ್ಕೆ ಇಳಿಸುತ್ತೇವೆ: IP ಮತ್ತು ಡೊಮೇನ್, ಮತ್ತು URL ನಿಂದ ನಿರ್ಬಂಧಿಸುವುದರಿಂದ ನಾವು ಡೊಮೇನ್ ಅನ್ನು ಸರಳವಾಗಿ ಹೊರತೆಗೆಯುತ್ತೇವೆ (ಹೆಚ್ಚು ನಿಖರವಾಗಿ, ಅವರು ಈಗಾಗಲೇ ನಮಗಾಗಿ ಇದನ್ನು ಮಾಡಿದ್ದಾರೆ).

ಒಳ್ಳೆಯ ಜನರಿಂದ ರೋಸ್ಕೊಮ್ಸ್ವೊಬೊಡಾ ಅದ್ಭುತವನ್ನು ಅರಿತುಕೊಂಡರು ಎಪಿಐ, ಇದರ ಮೂಲಕ ನಾವು ನಮಗೆ ಬೇಕಾದುದನ್ನು ಪಡೆಯಬಹುದು:

ನಿರ್ಬಂಧಿಸಿದ ಸೈಟ್‌ಗಳಿಗೆ ಪ್ರವೇಶ

ಇದನ್ನು ಮಾಡಲು, ನಮಗೆ ಕೆಲವು ಸಣ್ಣ ವಿದೇಶಿ VPS ಅಗತ್ಯವಿದೆ, ಮೇಲಾಗಿ ಅನಿಯಮಿತ ದಟ್ಟಣೆಯೊಂದಿಗೆ - 3-5 ಬಕ್ಸ್‌ಗೆ ಇವುಗಳಲ್ಲಿ ಹಲವು ಇವೆ. ನೀವು ಅದನ್ನು ವಿದೇಶದಲ್ಲಿ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗಿದೆ ಆದ್ದರಿಂದ ಪಿಂಗ್ ತುಂಬಾ ದೊಡ್ಡದಾಗಿರುವುದಿಲ್ಲ, ಆದರೆ ಮತ್ತೊಮ್ಮೆ, ಇಂಟರ್ನೆಟ್ ಮತ್ತು ಭೌಗೋಳಿಕತೆಯು ಯಾವಾಗಲೂ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ ಎಂದು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಿ. ಮತ್ತು 5 ಬಕ್ಸ್‌ಗೆ ಯಾವುದೇ SLA ಇಲ್ಲದಿರುವುದರಿಂದ, ದೋಷ ಸಹಿಷ್ಣುತೆಗಾಗಿ ವಿವಿಧ ಪೂರೈಕೆದಾರರಿಂದ 2+ ತುಣುಕುಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವುದು ಉತ್ತಮ.

ಮುಂದೆ, ನಾವು ಕ್ಲೈಂಟ್ ರೂಟರ್‌ನಿಂದ VPS ಗೆ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸುರಂಗವನ್ನು ಹೊಂದಿಸಬೇಕಾಗಿದೆ. ನಾನು ವೈರ್‌ಗಾರ್ಡ್ ಅನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಹೊಂದಿಸಲು ಸುಲಭ ಎಂದು ಬಳಸುತ್ತೇನೆ. ನಾನು ಲಿನಕ್ಸ್ ಆಧಾರಿತ ಕ್ಲೈಂಟ್ ರೂಟರ್‌ಗಳನ್ನು ಸಹ ಹೊಂದಿದ್ದೇನೆ (APU2 ಅಥವಾ OpenWRT ನಲ್ಲಿ ಏನಾದರೂ). ಕೆಲವು Mikrotik / Cisco ನ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು OpenVPN ಮತ್ತು GRE-over-IPSEC ನಂತಹ ಪ್ರೋಟೋಕಾಲ್‌ಗಳನ್ನು ಬಳಸಬಹುದು.

ಆಸಕ್ತಿಯ ದಟ್ಟಣೆಯ ಗುರುತಿಸುವಿಕೆ ಮತ್ತು ಮರುನಿರ್ದೇಶನ

ನೀವು ಸಹಜವಾಗಿ, ವಿದೇಶಗಳ ಮೂಲಕ ಎಲ್ಲಾ ಇಂಟರ್ನೆಟ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಆಫ್ ಮಾಡಬಹುದು. ಆದರೆ, ಹೆಚ್ಚಾಗಿ, ಸ್ಥಳೀಯ ವಿಷಯದೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ವೇಗವು ಇದರಿಂದ ಹೆಚ್ಚು ಬಳಲುತ್ತದೆ. ಜೊತೆಗೆ, VPS ನಲ್ಲಿ ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್ ಅವಶ್ಯಕತೆಗಳು ಹೆಚ್ಚು ಹೆಚ್ಚಿರುತ್ತವೆ.

ಆದ್ದರಿಂದ, ನಾವು ಹೇಗಾದರೂ ನಿರ್ಬಂಧಿಸಿದ ಸೈಟ್‌ಗಳಿಗೆ ದಟ್ಟಣೆಯನ್ನು ನಿಯೋಜಿಸಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಸುರಂಗಕ್ಕೆ ಆಯ್ದವಾಗಿ ನಿರ್ದೇಶಿಸಬೇಕಾಗುತ್ತದೆ. ಕೆಲವು "ಹೆಚ್ಚುವರಿ" ದಟ್ಟಣೆಯು ಅಲ್ಲಿಗೆ ಬಂದರೂ ಸಹ, ಸುರಂಗದ ಮೂಲಕ ಎಲ್ಲವನ್ನೂ ಓಡಿಸುವುದಕ್ಕಿಂತ ಇದು ಇನ್ನೂ ಉತ್ತಮವಾಗಿದೆ.

ಟ್ರಾಫಿಕ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು, ನಾವು BGP ಪ್ರೋಟೋಕಾಲ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ ಮತ್ತು ನಮ್ಮ VPS ನಿಂದ ಕ್ಲೈಂಟ್‌ಗಳಿಗೆ ಅಗತ್ಯ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಮಾರ್ಗಗಳನ್ನು ಘೋಷಿಸುತ್ತೇವೆ. BIRD ಅನ್ನು ಅತ್ಯಂತ ಕ್ರಿಯಾತ್ಮಕ ಮತ್ತು ಅನುಕೂಲಕರ BGP ಡೀಮನ್‌ಗಳಲ್ಲಿ ಒಂದಾಗಿ ತೆಗೆದುಕೊಳ್ಳೋಣ.

IP

IP ಮೂಲಕ ನಿರ್ಬಂಧಿಸುವುದರೊಂದಿಗೆ, ಎಲ್ಲವೂ ಸ್ಪಷ್ಟವಾಗಿದೆ: VPS ನೊಂದಿಗೆ ನಿರ್ಬಂಧಿಸಲಾದ ಎಲ್ಲಾ IP ಗಳನ್ನು ನಾವು ಸರಳವಾಗಿ ಘೋಷಿಸುತ್ತೇವೆ. ಸಮಸ್ಯೆಯೆಂದರೆ API ಹಿಂತಿರುಗಿಸುವ ಪಟ್ಟಿಯಲ್ಲಿ ಸುಮಾರು 600 ಸಾವಿರ ಸಬ್‌ನೆಟ್‌ಗಳಿವೆ ಮತ್ತು ಅವುಗಳಲ್ಲಿ ಹೆಚ್ಚಿನವು /32 ಹೋಸ್ಟ್‌ಗಳಾಗಿವೆ. ಈ ಸಂಖ್ಯೆಯ ಮಾರ್ಗಗಳು ದುರ್ಬಲ ಕ್ಲೈಂಟ್ ರೂಟರ್‌ಗಳನ್ನು ಗೊಂದಲಗೊಳಿಸಬಹುದು.

ಆದ್ದರಿಂದ, ಪಟ್ಟಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ, ಇದು 24 ಅಥವಾ ಹೆಚ್ಚಿನ ಹೋಸ್ಟ್ಗಳನ್ನು ಹೊಂದಿದ್ದರೆ ನೆಟ್ವರ್ಕ್ / 2 ವರೆಗೆ ಸಾರಾಂಶ ಮಾಡಲು ನಿರ್ಧರಿಸಲಾಯಿತು. ಹೀಗಾಗಿ, ಮಾರ್ಗಗಳ ಸಂಖ್ಯೆಯನ್ನು ~ 100 ಸಾವಿರಕ್ಕೆ ಇಳಿಸಲಾಯಿತು. ಇದರ ಸ್ಕ್ರಿಪ್ಟ್ ಅನುಸರಿಸುತ್ತದೆ.

ಡೊಮೇನ್‌ಗಳು

ಇದು ಹೆಚ್ಚು ಜಟಿಲವಾಗಿದೆ ಮತ್ತು ಹಲವಾರು ಮಾರ್ಗಗಳಿವೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಪ್ರತಿ ಕ್ಲೈಂಟ್ ರೂಟರ್‌ನಲ್ಲಿ ಪಾರದರ್ಶಕ ಸ್ಕ್ವಿಡ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬಹುದು ಮತ್ತು ಅಲ್ಲಿ HTTP ಪ್ರತಿಬಂಧವನ್ನು ಮಾಡಬಹುದು ಮತ್ತು ಮೊದಲ ಸಂದರ್ಭದಲ್ಲಿ ವಿನಂತಿಸಿದ URL ಅನ್ನು ಮತ್ತು ಎರಡನೆಯದರಲ್ಲಿ SNI ನಿಂದ ಡೊಮೇನ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳಲು TLS ಹ್ಯಾಂಡ್‌ಶೇಕ್‌ನಲ್ಲಿ ಇಣುಕಿ ನೋಡಬಹುದು.

ಆದರೆ ಎಲ್ಲಾ ರೀತಿಯ ಹೊಸಬಗೆಯ TLS1.3 + eSNI ಕಾರಣದಿಂದಾಗಿ, HTTPS ವಿಶ್ಲೇಷಣೆಯು ಪ್ರತಿದಿನವೂ ಕಡಿಮೆ ಮತ್ತು ಕಡಿಮೆ ನೈಜವಾಗುತ್ತಿದೆ. ಹೌದು, ಮತ್ತು ಕ್ಲೈಂಟ್ ಬದಿಯಲ್ಲಿರುವ ಮೂಲಸೌಕರ್ಯವು ಹೆಚ್ಚು ಜಟಿಲವಾಗಿದೆ - ನೀವು ಕನಿಷ್ಟ OpenWRT ಅನ್ನು ಬಳಸಬೇಕಾಗುತ್ತದೆ.

ಆದ್ದರಿಂದ, ನಾನು DNS ವಿನಂತಿಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಪ್ರತಿಬಂಧಿಸುವ ಮಾರ್ಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ನಿರ್ಧರಿಸಿದೆ. ಇಲ್ಲಿಯೂ ಸಹ, ಯಾವುದೇ DNS-over-TLS / HTTPS ನಿಮ್ಮ ತಲೆಯ ಮೇಲೆ ಸುಳಿದಾಡಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಆದರೆ ನಾವು (ಸದ್ಯಕ್ಕೆ) ಕ್ಲೈಂಟ್‌ನಲ್ಲಿ ಈ ಭಾಗವನ್ನು ನಿಯಂತ್ರಿಸಬಹುದು - ಅದನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಅಥವಾ DoT / DoH ಗಾಗಿ ನಿಮ್ಮ ಸ್ವಂತ ಸರ್ವರ್ ಅನ್ನು ಬಳಸಿ.

DNS ಅನ್ನು ಪ್ರತಿಬಂಧಿಸುವುದು ಹೇಗೆ?

ಇಲ್ಲಿಯೂ ಸಹ ಹಲವಾರು ವಿಧಾನಗಳಿರಬಹುದು.

  • PCAP ಅಥವಾ NFLOG ಮೂಲಕ DNS ದಟ್ಟಣೆಯ ಪ್ರತಿಬಂಧ
    ಪ್ರತಿಬಂಧದ ಈ ಎರಡೂ ವಿಧಾನಗಳನ್ನು ಉಪಯುಕ್ತತೆಯಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ ಸಿದ್ಮತ್. ಆದರೆ ಇದು ದೀರ್ಘಕಾಲದವರೆಗೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕತೆಯು ತುಂಬಾ ಪ್ರಾಚೀನವಾಗಿದೆ, ಆದ್ದರಿಂದ ನೀವು ಇನ್ನೂ ಅದಕ್ಕೆ ಸರಂಜಾಮು ಬರೆಯಬೇಕಾಗಿದೆ.
  • DNS ಸರ್ವರ್ ಲಾಗ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ
    ದುರದೃಷ್ಟವಶಾತ್, ನನಗೆ ತಿಳಿದಿರುವ ಪುನರಾವರ್ತನೆಗಳು ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಲಾಗ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ, ಆದರೆ ವಿನಂತಿಗಳನ್ನು ಮಾತ್ರ. ತಾತ್ವಿಕವಾಗಿ, ಇದು ತಾರ್ಕಿಕವಾಗಿದೆ, ಏಕೆಂದರೆ ವಿನಂತಿಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, ಉತ್ತರಗಳು ಸಂಕೀರ್ಣ ರಚನೆಯನ್ನು ಹೊಂದಿವೆ ಮತ್ತು ಅವುಗಳನ್ನು ಪಠ್ಯ ರೂಪದಲ್ಲಿ ಬರೆಯುವುದು ಕಷ್ಟ.
  • DNSTap
    ಅದೃಷ್ಟವಶಾತ್, ಅವರಲ್ಲಿ ಹಲವರು ಈಗಾಗಲೇ ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ DNSTap ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತಾರೆ.

DNSTap ಎಂದರೇನು?

DNSTap ಮತ್ತು BGP ಜೊತೆಗೆ ILV ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಬೈಪಾಸ್ ಮಾಡಿ

ಇದು ಪ್ರೋಟೋಕಾಲ್ ಬಫರ್‌ಗಳು ಮತ್ತು ಫ್ರೇಮ್ ಸ್ಟ್ರೀಮ್‌ಗಳನ್ನು ಆಧರಿಸಿದ ಕ್ಲೈಂಟ್-ಸರ್ವರ್ ಪ್ರೋಟೋಕಾಲ್ ಆಗಿದ್ದು, DNS ಸರ್ವರ್‌ನಿಂದ ರಚನಾತ್ಮಕ DNS ಪ್ರಶ್ನೆಗಳು ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಗಳ ಸಂಗ್ರಾಹಕಕ್ಕೆ ವರ್ಗಾಯಿಸುತ್ತದೆ. ಮೂಲಭೂತವಾಗಿ, DNS ಸರ್ವರ್ ಪ್ರಶ್ನೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ ಮೆಟಾಡೇಟಾವನ್ನು (ಸಂದೇಶದ ಪ್ರಕಾರ, ಕ್ಲೈಂಟ್/ಸರ್ವರ್ IP, ಇತ್ಯಾದಿ) ಜೊತೆಗೆ ಸಂಪೂರ್ಣ DNS ಸಂದೇಶಗಳನ್ನು (ಬೈನರಿ) ರೂಪದಲ್ಲಿ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಅವರೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

DNSTap ಮಾದರಿಯಲ್ಲಿ, DNS ಸರ್ವರ್ ಕ್ಲೈಂಟ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ಸಂಗ್ರಾಹಕ ಸರ್ವರ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಬಹಳ ಮುಖ್ಯ. ಅಂದರೆ, DNS ಸರ್ವರ್ ಸಂಗ್ರಾಹಕಕ್ಕೆ ಸಂಪರ್ಕಿಸುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿಯಾಗಿ ಅಲ್ಲ.

ಇಂದು ಎಲ್ಲಾ ಜನಪ್ರಿಯ DNS ಸರ್ವರ್‌ಗಳಲ್ಲಿ DNSTap ಬೆಂಬಲಿತವಾಗಿದೆ. ಆದರೆ, ಉದಾಹರಣೆಗೆ, ಅನೇಕ ವಿತರಣೆಗಳಲ್ಲಿ (ಉಬುಂಟು LTS ನಂತಹ) BIND ಅನ್ನು ಅದರ ಬೆಂಬಲವಿಲ್ಲದೆ ಕೆಲವು ಕಾರಣಗಳಿಗಾಗಿ ನಿರ್ಮಿಸಲಾಗಿದೆ. ಆದ್ದರಿಂದ ನಾವು ಮರುಜೋಡಣೆಗೆ ತಲೆಕೆಡಿಸಿಕೊಳ್ಳಬೇಡಿ, ಆದರೆ ಹಗುರವಾದ ಮತ್ತು ವೇಗವಾದ ರಿಕರ್ಸರ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ - ಅನ್ಬೌಂಡ್.

DNSTap ಅನ್ನು ಹಿಡಿಯುವುದು ಹೇಗೆ?

ಇವೆ ಕೆಲವು ಸಂಖ್ಯೆ DNSTap ಈವೆಂಟ್‌ಗಳ ಸ್ಟ್ರೀಮ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು CLI ಉಪಯುಕ್ತತೆಗಳು, ಆದರೆ ಅವು ನಮ್ಮ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಸೂಕ್ತವಲ್ಲ. ಆದ್ದರಿಂದ, ಅಗತ್ಯವಿರುವ ಎಲ್ಲವನ್ನೂ ಮಾಡುವ ನನ್ನ ಸ್ವಂತ ಬೈಸಿಕಲ್ ಅನ್ನು ಆವಿಷ್ಕರಿಸಲು ನಾನು ನಿರ್ಧರಿಸಿದೆ: dnstap-bgp

ಕೆಲಸದ ಅಲ್ಗಾರಿದಮ್:

  • ಪ್ರಾರಂಭಿಸಿದಾಗ, ಇದು ಪಠ್ಯ ಫೈಲ್‌ನಿಂದ ಡೊಮೇನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ, ಅವುಗಳನ್ನು (habr.com -> com.habr) ತಿರುಗಿಸುತ್ತದೆ, ಮುರಿದ ಸಾಲುಗಳು, ನಕಲುಗಳು ಮತ್ತು ಉಪಡೊಮೇನ್‌ಗಳನ್ನು ಹೊರತುಪಡಿಸಿ (ಅಂದರೆ ಪಟ್ಟಿಯು habr.com ಮತ್ತು www.habr.com ಅನ್ನು ಹೊಂದಿದ್ದರೆ, ಇದನ್ನು ಮೊದಲನೆಯದನ್ನು ಮಾತ್ರ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ) ಮತ್ತು ಈ ಪಟ್ಟಿಯ ಮೂಲಕ ವೇಗವಾಗಿ ಹುಡುಕಲು ಪೂರ್ವಪ್ರತ್ಯಯ ಟ್ರೀ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ
  • DNSTap ಸರ್ವರ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ, ಇದು DNS ಸರ್ವರ್‌ನಿಂದ ಸಂಪರ್ಕಕ್ಕಾಗಿ ಕಾಯುತ್ತಿದೆ. ತಾತ್ವಿಕವಾಗಿ, ಇದು UNIX ಮತ್ತು TCP ಸಾಕೆಟ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ, ಆದರೆ ನನಗೆ ತಿಳಿದಿರುವ DNS ಸರ್ವರ್‌ಗಳು UNIX ಸಾಕೆಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಬಳಸಬಹುದು
  • ಒಳಬರುವ DNSTap ಪ್ಯಾಕೆಟ್‌ಗಳನ್ನು ಮೊದಲು ಪ್ರೋಟೋಬಫ್ ರಚನೆಯಾಗಿ ಡೀರಿಯಲೈಸ್ ಮಾಡಲಾಗುತ್ತದೆ, ಮತ್ತು ನಂತರ ಬೈನರಿ DNS ಸಂದೇಶವನ್ನು ಪ್ರೊಟೊಬಫ್ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಒಂದನ್ನು ಡಿಎನ್‌ಎಸ್ ಆರ್‌ಆರ್ ದಾಖಲೆಗಳ ಮಟ್ಟಕ್ಕೆ ಪಾರ್ಸ್ ಮಾಡಲಾಗುತ್ತದೆ.
  • ವಿನಂತಿಸಿದ ಹೋಸ್ಟ್ (ಅಥವಾ ಅದರ ಮೂಲ ಡೊಮೇನ್) ಲೋಡ್ ಮಾಡಲಾದ ಪಟ್ಟಿಯಲ್ಲಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ, ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ
  • ಪ್ರತಿಕ್ರಿಯೆಯಿಂದ A/AAAA/CNAME RRಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ ಮತ್ತು ಅವುಗಳಿಂದ ಅನುಗುಣವಾದ IPv4/IPv6 ವಿಳಾಸಗಳನ್ನು ಹೊರತೆಗೆಯಲಾಗುತ್ತದೆ
  • IP ವಿಳಾಸಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದಾದ TTL ನೊಂದಿಗೆ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ BGP ಪೀರ್‌ಗಳಿಗೆ ಜಾಹೀರಾತು ಮಾಡಲಾಗುತ್ತದೆ
  • ಈಗಾಗಲೇ ಸಂಗ್ರಹವಾಗಿರುವ ಐಪಿಗೆ ಸೂಚಿಸುವ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸ್ವೀಕರಿಸುವಾಗ, ಅದರ TTL ಅನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ
  • TTL ಅವಧಿ ಮುಗಿದ ನಂತರ, ಪ್ರವೇಶವನ್ನು ಸಂಗ್ರಹದಿಂದ ಮತ್ತು BGP ಪ್ರಕಟಣೆಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ

ಹೆಚ್ಚುವರಿ ಕ್ರಿಯಾತ್ಮಕತೆ:

  • SIGHUP ಮೂಲಕ ಡೊಮೇನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಪುನಃ ಓದಲಾಗುತ್ತಿದೆ
  • ಇತರ ನಿದರ್ಶನಗಳೊಂದಿಗೆ ಸಿಂಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹವನ್ನು ಇರಿಸುವುದು dnstap-bgp HTTP/JSON ಮೂಲಕ
  • ಮರುಪ್ರಾರಂಭಿಸಿದ ನಂತರ ಅದರ ವಿಷಯಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹವನ್ನು (ಬೋಲ್ಟ್‌ಡಿಬಿ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ) ನಕಲು ಮಾಡಿ
  • ಬೇರೆ ನೆಟ್‌ವರ್ಕ್ ನೇಮ್‌ಸ್ಪೇಸ್‌ಗೆ ಬದಲಾಯಿಸಲು ಬೆಂಬಲ (ಇದು ಏಕೆ ಅಗತ್ಯವಿದೆ ಎಂಬುದನ್ನು ಕೆಳಗೆ ವಿವರಿಸಲಾಗುವುದು)
  • IPv6 ಬೆಂಬಲ

ಮಿತಿಗಳು:

  • IDN ಡೊಮೇನ್‌ಗಳು ಇನ್ನೂ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ
  • ಕೆಲವು BGP ಸೆಟ್ಟಿಂಗ್‌ಗಳು

ನಾನು ಸಂಗ್ರಹಿಸಿದೆ RPM ಮತ್ತು DEB ಸುಲಭ ಅನುಸ್ಥಾಪನೆಗೆ ಪ್ಯಾಕೇಜುಗಳು. systemd ಜೊತೆಗೆ ಎಲ್ಲಾ ತುಲನಾತ್ಮಕವಾಗಿ ಇತ್ತೀಚಿನ OS ಗಳಲ್ಲಿ ಕೆಲಸ ಮಾಡಬೇಕು. ಅವರು ಯಾವುದೇ ಅವಲಂಬನೆಗಳನ್ನು ಹೊಂದಿಲ್ಲ.

ಯೋಜನೆ

ಆದ್ದರಿಂದ, ಎಲ್ಲಾ ಘಟಕಗಳನ್ನು ಒಟ್ಟಿಗೆ ಜೋಡಿಸಲು ಪ್ರಾರಂಭಿಸೋಣ. ಪರಿಣಾಮವಾಗಿ, ನಾವು ಈ ರೀತಿಯ ನೆಟ್‌ವರ್ಕ್ ಟೋಪೋಲಜಿಯನ್ನು ಪಡೆಯಬೇಕು:
DNSTap ಮತ್ತು BGP ಜೊತೆಗೆ ILV ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಬೈಪಾಸ್ ಮಾಡಿ

ಕೆಲಸದ ತರ್ಕವು ರೇಖಾಚಿತ್ರದಿಂದ ಸ್ಪಷ್ಟವಾಗಿದೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ:

  • ಕ್ಲೈಂಟ್ ನಮ್ಮ ಸರ್ವರ್ ಅನ್ನು ಡಿಎನ್ಎಸ್ ಆಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದೆ ಮತ್ತು ಡಿಎನ್ಎಸ್ ಪ್ರಶ್ನೆಗಳು ವಿಪಿಎನ್ ಮೇಲೆ ಹೋಗಬೇಕು. ಇದು ಅವಶ್ಯಕವಾಗಿದೆ ಆದ್ದರಿಂದ ಒದಗಿಸುವವರು ನಿರ್ಬಂಧಿಸಲು DNS ಪ್ರತಿಬಂಧವನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ.
  • ಸೈಟ್ ಅನ್ನು ತೆರೆಯುವಾಗ, ಕ್ಲೈಂಟ್ "xxx.org ನ IP ಗಳು ಯಾವುವು" ನಂತಹ DNS ಪ್ರಶ್ನೆಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ.
  • ಅನ್ಬೌಂಡ್ xxx.org ಅನ್ನು ಪರಿಹರಿಸುತ್ತದೆ (ಅಥವಾ ಅದನ್ನು ಸಂಗ್ರಹದಿಂದ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ) ಮತ್ತು ಕ್ಲೈಂಟ್‌ಗೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ “xxx.org ಅಂತಹ ಮತ್ತು ಅಂತಹ ಐಪಿ ಹೊಂದಿದೆ”, ಅದನ್ನು DNSTap ಮೂಲಕ ಸಮಾನಾಂತರವಾಗಿ ನಕಲು ಮಾಡುತ್ತದೆ
  • dnstap-bgp ನಲ್ಲಿ ಈ ವಿಳಾಸಗಳನ್ನು ಪ್ರಕಟಿಸುತ್ತದೆ BIRD ಡೊಮೇನ್ ನಿರ್ಬಂಧಿಸಿದ ಪಟ್ಟಿಯಲ್ಲಿದ್ದರೆ BGP ಮೂಲಕ
  • BIRD ಜೊತೆಗೆ ಈ IP ಗಳಿಗೆ ಮಾರ್ಗವನ್ನು ಜಾಹೀರಾತು ಮಾಡುತ್ತದೆ next-hop self ಕ್ಲೈಂಟ್ ರೂಟರ್
  • ಕ್ಲೈಂಟ್‌ನಿಂದ ಈ ಐಪಿಗಳಿಗೆ ನಂತರದ ಪ್ಯಾಕೆಟ್‌ಗಳು ಸುರಂಗದ ಮೂಲಕ ಹೋಗುತ್ತವೆ

ಸರ್ವರ್‌ನಲ್ಲಿ, ನಿರ್ಬಂಧಿಸಿದ ಸೈಟ್‌ಗಳಿಗೆ ಮಾರ್ಗಗಳಿಗಾಗಿ, ನಾನು BIRD ಒಳಗೆ ಪ್ರತ್ಯೇಕ ಟೇಬಲ್ ಅನ್ನು ಬಳಸುತ್ತೇನೆ ಮತ್ತು ಅದು ಯಾವುದೇ ರೀತಿಯಲ್ಲಿ OS ನೊಂದಿಗೆ ಛೇದಿಸುವುದಿಲ್ಲ.

ಈ ಯೋಜನೆಯು ಒಂದು ನ್ಯೂನತೆಯನ್ನು ಹೊಂದಿದೆ: ಕ್ಲೈಂಟ್‌ನಿಂದ ಮೊದಲ SYN ಪ್ಯಾಕೆಟ್, ಹೆಚ್ಚಾಗಿ, ದೇಶೀಯ ಪೂರೈಕೆದಾರರ ಮೂಲಕ ಬಿಡಲು ಸಮಯವನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಮಾರ್ಗವನ್ನು ತಕ್ಷಣವೇ ಘೋಷಿಸಲಾಗಿಲ್ಲ. ಮತ್ತು ಪೂರೈಕೆದಾರರು ಹೇಗೆ ನಿರ್ಬಂಧಿಸುತ್ತಾರೆ ಎಂಬುದರ ಆಧಾರದ ಮೇಲೆ ಇಲ್ಲಿ ಆಯ್ಕೆಗಳು ಸಾಧ್ಯ. ಅವನು ಕೇವಲ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಬಿಟ್ಟರೆ, ಯಾವುದೇ ತೊಂದರೆ ಇಲ್ಲ. ಮತ್ತು ಅವನು ಅದನ್ನು ಕೆಲವು DPI ಗೆ ಮರುನಿರ್ದೇಶಿಸಿದರೆ, ನಂತರ (ಸೈದ್ಧಾಂತಿಕವಾಗಿ) ವಿಶೇಷ ಪರಿಣಾಮಗಳು ಸಾಧ್ಯ.

ಕ್ಲೈಂಟ್‌ಗಳು DNS TTL ಪವಾಡಗಳನ್ನು ಗೌರವಿಸದಿರುವ ಸಾಧ್ಯತೆಯಿದೆ, ಇದು ಕ್ಲೈಂಟ್ ಅನ್‌ಬೌಂಡ್ ಕೇಳುವ ಬದಲು ಅದರ ಕೊಳೆತ ಸಂಗ್ರಹದಿಂದ ಕೆಲವು ಹಳೆಯ ನಮೂದುಗಳನ್ನು ಬಳಸಲು ಕಾರಣವಾಗಬಹುದು.

ಪ್ರಾಯೋಗಿಕವಾಗಿ, ಮೊದಲ ಅಥವಾ ಎರಡನೆಯದು ನನಗೆ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡಲಿಲ್ಲ, ಆದರೆ ನಿಮ್ಮ ಮೈಲೇಜ್ ಬದಲಾಗಬಹುದು.

ಸರ್ವರ್ ಟ್ಯೂನಿಂಗ್

ರೋಲಿಂಗ್ ಸುಲಭಕ್ಕಾಗಿ, ನಾನು ಬರೆದಿದ್ದೇನೆ ಅನ್ಸಿಬಲ್ ಪಾತ್ರ. ಇದು Linux ಅನ್ನು ಆಧರಿಸಿ ಸರ್ವರ್‌ಗಳು ಮತ್ತು ಕ್ಲೈಂಟ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು (ಡೆಬ್-ಆಧಾರಿತ ವಿತರಣೆಗಳಿಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ). ಎಲ್ಲಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಸಾಕಷ್ಟು ಸ್ಪಷ್ಟವಾಗಿವೆ ಮತ್ತು ಹೊಂದಿಸಲಾಗಿದೆ inventory.yml. ಈ ಪಾತ್ರವನ್ನು ನನ್ನ ದೊಡ್ಡ ಪ್ಲೇಬುಕ್‌ನಿಂದ ಕತ್ತರಿಸಲಾಗಿದೆ, ಆದ್ದರಿಂದ ಇದು ದೋಷಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು - ಪುಲ್ ವಿನಂತಿಗಳು ಸ್ವಾಗತ 🙂

ಮುಖ್ಯ ಅಂಶಗಳ ಮೂಲಕ ಹೋಗೋಣ.

ಬಿಜಿಪಿ

ಒಂದೇ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಎರಡು BGP ಡೀಮನ್‌ಗಳನ್ನು ಚಾಲನೆ ಮಾಡುವುದು ಮೂಲಭೂತ ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿದೆ: ಸ್ಥಳೀಯ ಹೋಸ್ಟ್‌ನೊಂದಿಗೆ (ಅಥವಾ ಯಾವುದೇ ಸ್ಥಳೀಯ ಇಂಟರ್ಫೇಸ್) BGP ಪೀರಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸಲು BIRD ಬಯಸುವುದಿಲ್ಲ. ಎಲ್ಲಾ ಪದದಿಂದ. ಮೇಲಿಂಗ್-ಪಟ್ಟಿಗಳನ್ನು ಗೂಗ್ಲಿಂಗ್ ಮಾಡುವುದು ಮತ್ತು ಓದುವುದು ಸಹಾಯ ಮಾಡಲಿಲ್ಲ, ಇದು ವಿನ್ಯಾಸದ ಮೂಲಕ ಎಂದು ಅವರು ಹೇಳುತ್ತಾರೆ. ಬಹುಶಃ ಕೆಲವು ಮಾರ್ಗವಿದೆ, ಆದರೆ ನಾನು ಅದನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.

ನೀವು ಇನ್ನೊಂದು BGP ಡೀಮನ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು, ಆದರೆ ನಾನು BIRD ಅನ್ನು ಇಷ್ಟಪಡುತ್ತೇನೆ ಮತ್ತು ಅದನ್ನು ನಾನು ಎಲ್ಲೆಡೆ ಬಳಸುತ್ತಿದ್ದೇನೆ, ನಾನು ಘಟಕಗಳನ್ನು ಉತ್ಪಾದಿಸಲು ಬಯಸುವುದಿಲ್ಲ.

ಆದ್ದರಿಂದ, ನಾನು ನೆಟ್‌ವರ್ಕ್ ನೇಮ್‌ಸ್ಪೇಸ್‌ನೊಳಗೆ dnstap-bgp ಅನ್ನು ಮರೆಮಾಡಿದೆ, ಇದು ವೆಥ್ ಇಂಟರ್ಫೇಸ್ ಮೂಲಕ ರೂಟ್‌ಗೆ ಸಂಪರ್ಕ ಹೊಂದಿದೆ: ಇದು ಪೈಪ್‌ನಂತೆ, ಅದರ ತುದಿಗಳು ವಿಭಿನ್ನ ನೇಮ್‌ಸ್ಪೇಸ್‌ಗಳಲ್ಲಿ ಅಂಟಿಕೊಳ್ಳುತ್ತವೆ. ಈ ಪ್ರತಿಯೊಂದು ತುದಿಗಳಲ್ಲಿ, ಹೋಸ್ಟ್ ಅನ್ನು ಮೀರಿ ಹೋಗದ ಖಾಸಗಿ p2p IP ವಿಳಾಸಗಳನ್ನು ನಾವು ಸ್ಥಗಿತಗೊಳಿಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ಅವುಗಳು ಯಾವುದಾದರೂ ಆಗಿರಬಹುದು. ಒಳಗೆ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಬಳಸುವ ಅದೇ ಕಾರ್ಯವಿಧಾನವಾಗಿದೆ ಎಲ್ಲರಿಂದ ಪ್ರೀತಿಪಾತ್ರರು ಡಾಕರ್ ಮತ್ತು ಇತರ ಪಾತ್ರೆಗಳು.

ಇದಕ್ಕಾಗಿ ಬರೆಯಲಾಗಿದೆ ಸ್ಕ್ರಿಪ್ಟ್ ಮತ್ತು ಇನ್ನೊಂದು ನೇಮ್‌ಸ್ಪೇಸ್‌ಗೆ ಕೂದಲಿನಿಂದ ನಿಮ್ಮನ್ನು ಎಳೆಯಲು ಈಗಾಗಲೇ ಮೇಲೆ ವಿವರಿಸಿದ ಕಾರ್ಯವನ್ನು dnstap-bgp ಗೆ ಸೇರಿಸಲಾಗಿದೆ. ಈ ಕಾರಣದಿಂದಾಗಿ, ಇದನ್ನು ರೂಟ್ ಆಗಿ ಚಲಾಯಿಸಬೇಕು ಅಥವಾ ಸೆಟ್‌ಕ್ಯಾಪ್ ಆಜ್ಞೆಯ ಮೂಲಕ CAP_SYS_ADMIN ಬೈನರಿಗೆ ನೀಡಬೇಕು.

ನೇಮ್‌ಸ್ಪೇಸ್ ರಚಿಸಲು ಉದಾಹರಣೆ ಸ್ಕ್ರಿಪ್ಟ್

#!/bin/bash

NS="dtap"

IP="/sbin/ip"
IPNS="$IP netns exec $NS $IP"

IF_R="veth-$NS-r"
IF_NS="veth-$NS-ns"

IP_R="192.168.149.1"
IP_NS="192.168.149.2"

/bin/systemctl stop dnstap-bgp || true

$IP netns del $NS > /dev/null 2>&1
$IP netns add $NS

$IP link add $IF_R type veth peer name $IF_NS
$IP link set $IF_NS netns $NS

$IP addr add $IP_R remote $IP_NS dev $IF_R
$IP link set $IF_R up

$IPNS addr add $IP_NS remote $IP_R dev $IF_NS
$IPNS link set $IF_NS up

/bin/systemctl start dnstap-bgp

dnstap-bgp.conf

namespace = "dtap"
domains = "/var/cache/rkn_domains.txt"
ttl = "168h"

[dnstap]
listen = "/tmp/dnstap.sock"
perm = "0666"

[bgp]
as = 65000
routerid = "192.168.149.2"

peers = [
    "192.168.149.1",
]

bird.conf

router id 192.168.1.1;

table rkn;

# Clients
protocol bgp bgp_client1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.2 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    export all;
    import none;
}

# DNSTap-BGP
protocol bgp bgp_dnstap {
    table rkn;
    local as 65000;
    neighbor 192.168.149.2 as 65000;
    direct;
    passive on;
    rr client;
    import all;
    export none;
}

# Static routes list
protocol static static_rkn {
    table rkn;
    include "rkn_routes.list";
    import all;
    export none;
}

rkn_routes.list

route 3.226.79.85/32 via "ens3";
route 18.236.189.0/24 via "ens3";
route 3.224.21.0/24 via "ens3";
...

ಡಿಎನ್ಎಸ್

ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಉಬುಂಟುನಲ್ಲಿ, ಅನ್‌ಬೌಂಡ್ ಬೈನರಿಯನ್ನು AppArmor ಪ್ರೊಫೈಲ್‌ನಿಂದ ಕ್ಲ್ಯಾಂಪ್ ಮಾಡಲಾಗಿದೆ, ಇದು ಎಲ್ಲಾ ರೀತಿಯ DNSTap ಸಾಕೆಟ್‌ಗಳಿಗೆ ಸಂಪರ್ಕಿಸುವುದನ್ನು ನಿಷೇಧಿಸುತ್ತದೆ. ನೀವು ಈ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅಳಿಸಬಹುದು ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು:

# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.unbound

ಇದನ್ನು ಬಹುಶಃ ಪ್ಲೇಬುಕ್‌ಗೆ ಸೇರಿಸಬೇಕು. ಪ್ರೊಫೈಲ್ ಅನ್ನು ಸರಿಪಡಿಸಲು ಮತ್ತು ಅಗತ್ಯ ಹಕ್ಕುಗಳನ್ನು ನೀಡಲು ಇದು ಸೂಕ್ತವಾಗಿದೆ, ಆದರೆ ನಾನು ತುಂಬಾ ಸೋಮಾರಿಯಾಗಿದ್ದೆ.

unbound.conf

server:
    chroot: ""
    port: 53
    interface: 0.0.0.0
    root-hints: "/var/lib/unbound/named.root"
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    access-control: 192.168.0.0/16 allow

remote-control:
    control-enable: yes
    control-use-cert: no

dnstap:
    dnstap-enable: yes
    dnstap-socket-path: "/tmp/dnstap.sock"
    dnstap-send-identity: no
    dnstap-send-version: no

    dnstap-log-client-response-messages: yes

ಪಟ್ಟಿಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುವುದು ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದು

IP ವಿಳಾಸಗಳ ಪಟ್ಟಿಯನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸ್ಕ್ರಿಪ್ಟ್
ಇದು ಪಟ್ಟಿಯನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುತ್ತದೆ, ಪೂರ್ವಪ್ರತ್ಯಯದ ಮೊತ್ತವನ್ನು ನೀಡುತ್ತದೆ pfx. ದಿ ಸೇರಿಸಬೇಡಿ и ಸಾರಾಂಶ_ಮಾಡಬೇಡಿ ನೀವು IP ಗಳು ಮತ್ತು ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಲು ಅಥವಾ ಸಾರಾಂಶವನ್ನು ನೀಡದಿರಲು ಹೇಳಬಹುದು. ನನಗೆ ಅದು ಬೇಕಿತ್ತು. ನನ್ನ VPS ನ ಸಬ್‌ನೆಟ್ ಬ್ಲಾಕ್‌ಲಿಸ್ಟ್‌ನಲ್ಲಿದೆ 🙂

ತಮಾಷೆಯ ವಿಷಯವೆಂದರೆ RosKomSvoboda API ಡೀಫಾಲ್ಟ್ ಪೈಥಾನ್ ಬಳಕೆದಾರ ಏಜೆಂಟ್‌ನೊಂದಿಗೆ ವಿನಂತಿಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ಸ್ಕ್ರಿಪ್ಟ್-ಕಿಡ್ಡಿ ಅದನ್ನು ಪಡೆದುಕೊಂಡಂತೆ ತೋರುತ್ತಿದೆ. ಆದ್ದರಿಂದ, ನಾವು ಅದನ್ನು Ognelis ಗೆ ಬದಲಾಯಿಸುತ್ತೇವೆ.

ಇಲ್ಲಿಯವರೆಗೆ, ಇದು IPv4 ನೊಂದಿಗೆ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. IPv6 ನ ಪಾಲು ಚಿಕ್ಕದಾಗಿದೆ, ಆದರೆ ಅದನ್ನು ಸರಿಪಡಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ. ನೀವು bird6 ಅನ್ನು ಬಳಸಬೇಕೇ ಹೊರತು.

rkn.py

#!/usr/bin/python3

import json, urllib.request, ipaddress as ipa

url = 'https://api.reserve-rbl.ru/api/v2/ips/json'
pfx = '24'

dont_summarize = {
    # ipa.IPv4Network('1.1.1.0/24'),
}

dont_add = {
    # ipa.IPv4Address('1.1.1.1'),
}

req = urllib.request.Request(
    url,
    data=None, 
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)

f = urllib.request.urlopen(req)
ips = json.loads(f.read().decode('utf-8'))

prefix32 = ipa.IPv4Address('255.255.255.255')

r = {}
for i in ips:
    ip = ipa.ip_network(i)
    if not isinstance(ip, ipa.IPv4Network):
        continue

    addr = ip.network_address

    if addr in dont_add:
        continue

    m = ip.netmask
    if m != prefix32:
        r[m] = [addr, 1]
        continue

    sn = ipa.IPv4Network(str(addr) + '/' + pfx, strict=False)

    if sn in dont_summarize:
        tgt = addr
    else:
        tgt = sn

    if not sn in r:
        r[tgt] = [addr, 1]
    else:
        r[tgt][1] += 1

o = []
for n, v in r.items():
    if v[1] == 1:
        o.append(str(v[0]) + '/32')
    else:
        o.append(n)

for k in o:
    print(k)

ನವೀಕರಿಸಲು ಸ್ಕ್ರಿಪ್ಟ್
ನಾನು ದಿನಕ್ಕೆ ಒಮ್ಮೆ ಕಿರೀಟದ ಮೇಲೆ ಓಡುತ್ತೇನೆ, ಬಹುಶಃ ಪ್ರತಿ 4 ಗಂಟೆಗಳಿಗೊಮ್ಮೆ ಅದನ್ನು ಎಳೆಯಲು ಯೋಗ್ಯವಾಗಿದೆ. ಇದು, ನನ್ನ ಅಭಿಪ್ರಾಯದಲ್ಲಿ, RKN ಪೂರೈಕೆದಾರರಿಂದ ಅಗತ್ಯವಿರುವ ನವೀಕರಣದ ಅವಧಿಯಾಗಿದೆ. ಜೊತೆಗೆ, ಅವರು ಕೆಲವು ಇತರ ಸೂಪರ್-ತುರ್ತು ನಿರ್ಬಂಧಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿದ್ದಾರೆ, ಅದು ವೇಗವಾಗಿ ಬರಬಹುದು.

ಕೆಳಗಿನವುಗಳನ್ನು ಮಾಡುತ್ತದೆ:

  • ಮೊದಲ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಮಾರ್ಗಗಳ ಪಟ್ಟಿಯನ್ನು ನವೀಕರಿಸುತ್ತದೆ (rkn_routes.list) BIRD ಗಾಗಿ
  • BIRD ಅನ್ನು ಮರುಲೋಡ್ ಮಾಡಿ
  • dnstap-bgp ಗಾಗಿ ಡೊಮೇನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ನವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸುತ್ತದೆ
  • dnstap-bgp ಅನ್ನು ಮರುಲೋಡ್ ಮಾಡಿ

rkn_update.sh

#!/bin/bash

ROUTES="/etc/bird/rkn_routes.list"
DOMAINS="/var/cache/rkn_domains.txt"

# Get & summarize routes
/opt/rkn.py | sed 's/(.*)/route 1 via "ens3";/' > $ROUTES.new

if [ $? -ne 0 ]; then
    rm -f $ROUTES.new
    echo "Unable to download RKN routes"
    exit 1
fi

if [ -e $ROUTES ]; then
    mv $ROUTES $ROUTES.old
fi

mv $ROUTES.new $ROUTES

/bin/systemctl try-reload-or-restart bird

# Get domains
curl -s https://api.reserve-rbl.ru/api/v2/domains/json -o - | jq -r '.[]' | sed 's/^*.//' | sort | uniq > $DOMAINS.new

if [ $? -ne 0 ]; then
    rm -f $DOMAINS.new
    echo "Unable to download RKN domains"
    exit 1
fi

if [ -e $DOMAINS ]; then
    mv $DOMAINS $DOMAINS.old
fi

mv $DOMAINS.new $DOMAINS

/bin/systemctl try-reload-or-restart dnstap-bgp

ಅವುಗಳನ್ನು ಹೆಚ್ಚು ಯೋಚಿಸದೆ ಬರೆಯಲಾಗಿದೆ, ಆದ್ದರಿಂದ ನೀವು ಸುಧಾರಿಸಬಹುದಾದ ಏನನ್ನಾದರೂ ನೋಡಿದರೆ - ಅದಕ್ಕೆ ಹೋಗಿ.

ಕ್ಲೈಂಟ್ ಸೆಟಪ್

ಇಲ್ಲಿ ನಾನು ಲಿನಕ್ಸ್ ರೂಟರ್‌ಗಳಿಗೆ ಉದಾಹರಣೆಗಳನ್ನು ನೀಡುತ್ತೇನೆ, ಆದರೆ ಮಿಕ್ರೋಟಿಕ್ / ಸಿಸ್ಕೊದ ಸಂದರ್ಭದಲ್ಲಿ ಅದು ಇನ್ನೂ ಸುಲಭವಾಗಿರಬೇಕು.

ಮೊದಲಿಗೆ, ನಾವು BIRD ಅನ್ನು ಹೊಂದಿಸುತ್ತೇವೆ:

bird.conf

router id 192.168.1.2;
table rkn;

protocol device {
    scan time 10;
};

# Servers
protocol bgp bgp_server1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.1 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    rr client;
    export none;
    import all;
}

protocol kernel {
    table rkn;
    kernel table 222;
    scan time 10;
    export all;
    import none;
}

ಹೀಗಾಗಿ, ನಾವು BGP ಯಿಂದ ಸ್ವೀಕರಿಸಿದ ಮಾರ್ಗಗಳನ್ನು ಕರ್ನಲ್ ರೂಟಿಂಗ್ ಟೇಬಲ್ ಸಂಖ್ಯೆ 222 ನೊಂದಿಗೆ ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡುತ್ತೇವೆ.

ಅದರ ನಂತರ, ಡೀಫಾಲ್ಟ್ ಅನ್ನು ನೋಡುವ ಮೊದಲು ಈ ಪ್ಲೇಟ್ ಅನ್ನು ನೋಡಲು ಕರ್ನಲ್ ಅನ್ನು ಕೇಳಲು ಸಾಕು:

# ip rule add from all pref 256 lookup 222
# ip rule
0:  from all lookup local
256:    from all lookup 222
32766:  from all lookup main
32767:  from all lookup default

ಎಲ್ಲವೂ, ಸರ್ವರ್‌ನ ಸುರಂಗ IP ವಿಳಾಸವನ್ನು DNS ಆಗಿ ವಿತರಿಸಲು ರೂಟರ್‌ನಲ್ಲಿ DHCP ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಉಳಿದಿದೆ ಮತ್ತು ಯೋಜನೆಯು ಸಿದ್ಧವಾಗಿದೆ.

ನ್ಯೂನತೆಗಳನ್ನು

ಡೊಮೇನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಉತ್ಪಾದಿಸಲು ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಪ್ರಸ್ತುತ ಅಲ್ಗಾರಿದಮ್‌ನೊಂದಿಗೆ, ಇದು ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ, youtube.com ಮತ್ತು ಅದರ CDN ಗಳು.

ಮತ್ತು ಎಲ್ಲಾ ವೀಡಿಯೊಗಳು VPN ಮೂಲಕ ಹೋಗುತ್ತವೆ ಎಂಬ ಅಂಶಕ್ಕೆ ಇದು ಕಾರಣವಾಗುತ್ತದೆ, ಅದು ಸಂಪೂರ್ಣ ಚಾನಲ್ ಅನ್ನು ಮುಚ್ಚಬಹುದು. ಬಹುಶಃ ಇದು ಜನಪ್ರಿಯ ಡೊಮೇನ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಕಂಪೈಲ್ ಮಾಡುವುದು ಯೋಗ್ಯವಾಗಿದೆ - ಸದ್ಯಕ್ಕೆ RKN ಅನ್ನು ನಿರ್ಬಂಧಿಸುವ ಹೊರಗಿಡುವಿಕೆಗಳು, ಕರುಳುಗಳು ತೆಳುವಾದವು. ಮತ್ತು ಪಾರ್ಸ್ ಮಾಡುವಾಗ ಅವುಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ.

ತೀರ್ಮಾನಕ್ಕೆ

ವಿವರಿಸಿದ ವಿಧಾನವು ಪೂರೈಕೆದಾರರು ಪ್ರಸ್ತುತ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಯಾವುದೇ ನಿರ್ಬಂಧವನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ತಾತ್ವಿಕವಾಗಿ, dnstap-bgp ಡೊಮೇನ್ ಹೆಸರಿನ ಆಧಾರದ ಮೇಲೆ ಕೆಲವು ಮಟ್ಟದ ಟ್ರಾಫಿಕ್ ನಿಯಂತ್ರಣದ ಅಗತ್ಯವಿರುವಲ್ಲಿ ಬೇರೆ ಯಾವುದೇ ಉದ್ದೇಶಕ್ಕಾಗಿ ಬಳಸಬಹುದು. ನಮ್ಮ ಸಮಯದಲ್ಲಿ, ಸಾವಿರ ಸೈಟ್‌ಗಳು ಒಂದೇ ಐಪಿ ವಿಳಾಸದಲ್ಲಿ ಸ್ಥಗಿತಗೊಳ್ಳಬಹುದು (ಉದಾಹರಣೆಗೆ ಕೆಲವು ಕ್ಲೌಡ್‌ಫ್ಲೇರ್‌ನ ಹಿಂದೆ), ಆದ್ದರಿಂದ ಈ ವಿಧಾನವು ಕಡಿಮೆ ನಿಖರತೆಯನ್ನು ಹೊಂದಿದೆ ಎಂಬುದನ್ನು ನೆನಪಿನಲ್ಲಿಡಿ.

ಆದರೆ ಬೈಪಾಸ್ ಬೀಗಗಳ ಅಗತ್ಯಗಳಿಗಾಗಿ, ಇದು ಸಾಕಷ್ಟು ಸಾಕು.

ಸೇರ್ಪಡೆಗಳು, ಸಂಪಾದನೆಗಳು, ವಿನಂತಿಗಳನ್ನು ಎಳೆಯಿರಿ - ಸ್ವಾಗತ!

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ