试图在Ubuntu Server 12.04上通过VPN路由传出的http请求

我有一台运行在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:

  1. 创build命名路由表(只需要做一次)

    echo 10 ec2 >> /etc/iproute2/rt_tables echo 11 vpn >> /etc/iproute2/rt_tables 
  2. 使用默认路由通过各自的网关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 
  3. 添加路由规则,根据源地址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代理服务器来执行此部分。