我有一台运行在Amazon EC2上的Ubuntu 12.04服务器,运行一个networking抓取过程。 我们遇到了一些问题,一些托pipe我们需要爬取的网站的networking服务器阻止了所有的EC2 IP地址。
我的精彩想法是通过VPN隧道传出HTTP请求。 我能够设置VPN,但它通过VPN路由所有stream量,这意味着我不能SSH进入机器,它不会响应任何传入的http请求。 (这个服务器还托pipe一个我们需要能够访问的Web服务)
真的,我只是想通过VPN“代理”所有传出的HTTP请求,所以我们可以访问所有EC2 IP被阻止的站点。
这很可能是我错误的方式,我欢迎任何其他可能更简单或更强大的build议。
您需要的是源策略路由,以将响应路由到EC2网关(而不是VPN)的传入连接。 假设您的实例的内部IP为1.0.0.20,默认网关为1.0.0.1,VPN IP为10.8.0.20:
创build命名路由表(只需要做一次)
echo 10 ec2 >> /etc/iproute2/rt_tables echo 11 vpn >> /etc/iproute2/rt_tables
使用默认路由通过各自的网关configuration新的路由表
ip route add 1.0.0.0/24 dev eth0 table ec2 ip route add default via 1.0.0.1 table ec2 ip route add 10.8.0.0/24 dev tun0 table vpn ip route add default via 1.0.0.1 table vpn
添加路由规则,根据源地址select正确的路由表
ip rule add from 1.0.0.20 lookup ec2 ip rule add from 10.8.0.20 lookup vpn
这应该允许您将默认网关设置为VPN并且仍然有传入连接工作。
然而,你可以做的是,configuration你的应用程序在创build传出连接时明确绑定到VPN IP(10.8.0.20),这将导致来自该应用程序的所有连接都通过VPN,但所有其他传出连接直接外出。 如果您不能将应用程序configuration为绑定到VPN IP,则可以添加HTTP代理服务器来执行此部分。