From 0a1ff6ba9ed08e705946addeb4034d90d65ce28a Mon Sep 17 00:00:00 2001 From: jung-geun Date: Mon, 9 Jun 2025 01:34:25 +0900 Subject: [PATCH] =?UTF-8?q?DNS=20=EC=84=9C=EB=B2=84=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8C=85=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EA=B8=B0=EC=A1=B4=20DNS=20=EC=84=9C=EB=B2=84=20=EB=9D=BC?= =?UTF-8?q?=EC=9A=B0=ED=8A=B8=20=EC=A0=9C=EA=B1=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- policy_routing.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/policy_routing.py b/policy_routing.py index 1f4f237..dae87a6 100755 --- a/policy_routing.py +++ b/policy_routing.py @@ -429,6 +429,20 @@ class PolicyBasedRoutingManager: # 기존 default 라우트 제거 self.run_command("ip route del default", ignore_error=True) + # DNS 서버 목록 (널리 사용되는 공용 DNS) + dns_servers = [ + "8.8.8.8", # Google DNS + "8.8.4.4", # Google DNS + "1.1.1.1", # Cloudflare DNS + "1.0.0.1", # Cloudflare DNS + "208.67.222.222", # OpenDNS + "208.67.220.220", # OpenDNS + ] + + # 기존 DNS 서버 라우트 제거 + for dns in dns_servers: + self.run_command(f"ip route del {dns}", ignore_error=True) + # metric 순으로 정렬하여 default 라우트 추가 sorted_nics = sorted(self.config["nics"].items(), key=lambda x: x[1]["metric"]) @@ -444,6 +458,25 @@ class PolicyBasedRoutingManager: f"Default 라우트 추가: {gateway} via {interface} (metric: {metric})" ) + # DNS 서버들을 NIC별로 분산하여 라우팅 설정 + self.logger.info("DNS 서버 라우팅 설정 중...") + + for i, dns in enumerate(dns_servers): + # DNS 서버를 NIC 개수만큼 순환하여 분산 + nic_index = i % len(sorted_nics) + nic_name, nic_config = sorted_nics[nic_index] + + interface = nic_config["interface"] + gateway = nic_config["gateway"] + metric = nic_config["metric"] + + self.run_command( + f"ip route add {dns} via {gateway} dev {interface} metric {metric}" + ) + self.logger.info( + f"DNS 라우트 추가: {dns} via {gateway} (interface: {interface}, metric: {metric})" + ) + def check_interfaces(self): """네트워크 인터페이스 상태 확인""" self.logger.info("네트워크 인터페이스 상태 확인 중...") @@ -727,6 +760,21 @@ class StartupPolicyBasedRoutingManager: def setup_main_routing(self, current_nics): self.logger.info("메인 라우팅 테이블 설정 중...") self.run_command("ip route del default", ignore_error=True) + + # DNS 서버 목록 (널리 사용되는 공용 DNS) + dns_servers = [ + "8.8.8.8", # Google DNS + "8.8.4.4", # Google DNS + "1.1.1.1", # Cloudflare DNS + "1.0.0.1", # Cloudflare DNS + "208.67.222.222", # OpenDNS + "208.67.220.220", # OpenDNS + ] + + # 기존 DNS 서버 라우트 제거 + for dns in dns_servers: + self.run_command(f"ip route del {{dns}}", ignore_error=True) + sorted_nics = sorted(current_nics.items(), key=lambda x: x[1]["metric"]) for nic_name, nic_config in sorted_nics: interface = nic_config["interface"] @@ -734,6 +782,21 @@ class StartupPolicyBasedRoutingManager: metric = nic_config["metric"] self.run_command(f"ip route add default via {{gateway}} dev {{interface}} metric {{metric}}") self.logger.info(f"Default 라우트 추가: {{gateway}} via {{interface}} (metric: {{metric}})") + + # DNS 서버들을 NIC별로 분산하여 라우팅 설정 + self.logger.info("DNS 서버 라우팅 설정 중...") + + for i, dns in enumerate(dns_servers): + # DNS 서버를 NIC 개수만큼 순환하여 분산 + nic_index = i % len(sorted_nics) + nic_name, nic_config = sorted_nics[nic_index] + + interface = nic_config["interface"] + gateway = nic_config["gateway"] + metric = nic_config["metric"] + + self.run_command(f"ip route add {{dns}} via {{gateway}} dev {{interface}} metric {{metric}}") + self.logger.info(f"DNS 라우트 추가: {{dns}} via {{gateway}} (interface: {{interface}}, metric: {{metric}})") def main_startup(): manager = StartupPolicyBasedRoutingManager()