如何根据域名进行路由?

如何根据域名进行路由?

我可以通过命令按 IP 范围进行路由route。但是有基于域的路由解决方案吗?

答案1

路由是一种第 3 层技术,可将您的数据包发送到它们应该到达的地方。第 3 层信息几乎只有源 IP、目标 IP 和碎片信息。

域名等额外信息远远超出了第 3 层,而是第 7 层(应用层)。因此,此类信息不适用于路由。

有一些特定的技术使用第 3 层以上的信息,例如策略路由,它使用第 4 层信息(TCP/UDP 端口)来路由特定数据包。据我所知,这是最高水平。

如果您可以控制该域名,则可以指定特定 IP,然后路由器将以特定方式路由该 IP。如果您不能这样做,据我所知,恐怕这是不可能的。

答案2

您在 DNS 服务器上使用 SRV 记录。

例如:

子域 TTL 数据(优先)

服务器1.域.com : 3600 : 10 10 1337 域.com

这会将域 server1.domain.com 上的所有传入流量映射到 domain.com 上的端口 1337

就这么简单。

答案3

没有基于域的路由解决方案。但您可以使用此解决方法脚本。它获取您域的 IP 并添加路由。您可以将其添加到任务计划程序中,以在 Windows 启动时或以任何特定间隔运行,它将继续添加路由。它不使用 -p 选项,因此添加的路由不是永久性的。

:: Get IP of Domain name
setlocal EnableDelayedExpansion

set myServer=your.server.com

for /f "tokens=1,2 delims=[]" %%a IN ('ping -n 1 !myServer!') DO (
 if "%%b" NEQ "" set myServerIP=%%b
)
echo ip is %myServerIP%

route add %myServerIP% mask 255.255.255.255 <gateway ip>
EXIT

希望这可以帮助!

答案4

我编写了如下简单脚本local-route并使用:

#!/bin/bash 

DEFAULT_GW=$(ip route | grep default | grep via | awk '{print $3}') 

if [ -z $1 ] ; then 
        echo "Please enter url"
        echo "Example: local-route http://www.example.com" 
        echo "         local-route www.example.com" 
        echo "         local-route example.com" 
        echo "         local-route example.com/api/v1/..." 
        exit 1
fi


URL=$(echo $1 | sed 's/.*:\/\///' | sed 's/\/.*//') 

IPS=$(dig +short $URL) 

for I in $IPS 
do
        echo $I
        ip route add $I via $DEFAULT_GW 2> /dev/null
done

相关内容