我可以通过命令按 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