I am moving this request here because this was put on hold in the main Stack Exchange group.
Are there any routers (software or hardware) capable of routing packets based on URL or DNS lookup pattern matching? I'd prefer linux/free if possible, but oh well if commercial is the only solution.
I am in a location where speeds greater than 1.5 megabit DSL are not available, and the only other bulk data carrier is via satellite. I am contemplating getting both of these installed, and then routing packets based on the DNS lookup name or the site URL, to pick the outgoing path that best suits either of these services.
- Satellite: High bandwidth, but over 500-1500ms latency
- DSL: Low bandwidth, but also low latency
So separate routing based on service type:
- Youtube, Vimeo, and other streaming -> Satellite
- SMTP, Usenet, BitTorrent, FTP, SFTP, Rsync -> Satellite
- Any SSH, VOIP, remote desktop -> DSL
Just routing by ports does not work since some of these use random ports, like BitTorrent. Routing all port 80/443 to one or the other does not work since some web servers are live/interactive, and some are bulk/streaming.
This modern world of virtual hosts, cloud services, etc, make it hard to do this using numeric address destination-based routing, since Google and Amazon for example uses huge farms of servers that can dynamically change function from one day to the next.
Even just routing based on the domain name lookup may not be granular enough, due to some domains doing a hundred different services all under a single domain name (ahem, google.com) and varying only in the URLs pointing at that domain.
I know that URL based routing would require a proxy, though a transparent proxy in the router may work for HTTPS.
This appears to be an obscure question, with few potential solutions, since it requires a very non-standard mixing of the many layers of network protocols. It is likely that there is nothing available that can do this. So far I am not finding any solutions doing my own searches on this.
Generally I am expecting this would work something like the following. Though, I am not an expert and I don't have the ability to implement this if nothing else exists to do it.
Client does DNS lookup to router:
- router checks for domain in routing destination list
- router sets a permanent route for the client before it returns DNS results
- route stays active until router reboot or the next DNS lookup that overrides the route
Client does HTTP GET with URL:
- router intercepts this request without forwarding to destination
- router checks for url in routing destination list, sets route from each client address source to that exact destination address. -- if NAT is enabled (most likely on IPv4) maintain separate routes for each client device to the external side
- router forwards cached URL to destination, does not interact further
- route stays active for URL until router reboot, or the next URL lookup that overrides the route
It is possible that subsequent URL lookups for different services going to a single numeric destination could overwrite each other, and cause problems since routing isn't normally intended to be this granular.
And since UDP packets are stateless it is impossible to determine how long a specific route should stay active, other than to keep the route active indefinitely and don't change it again until the router reboots.