基于 iptables 端口的路由

基于 iptables 端口的路由

我已经在 Google 上搜索了好几天,但都没有成功。我时不时地从我的服务器连接到 VPN,我试图将我的 Debian 服务器配置为仅通过 VPN 使用端口 80 和 443,并通过 eth0 接口使用所有其他端口。

非常感谢任何为此提供的帮助。

答案1

首先,请参阅本指南:http://lartc.org/howto/lartc.rpdb.multiple-links.html(和/或其他使用多个默认路由的指南)

因此,对于您的情况,我认为解决方案是为您的服务器配置两个网络接口(默认的 eth0 和例如 eth0:1,使用与您的局域网不同的有效 ip),然后配置路由,以便默认情况下所有流量都转到 vpn,而来自辅助接口的流量不会进入 vpn。然后使用 ssh 绑定到辅助接口(带 -b 选项)。

或者设置多个路由,以便来自辅助接口的流量转到 VPN,然后设置一个 (仅) 绑定到辅助 IP 地址的 www 代理服务器。然后将该代理服务器与浏览器一起使用。

或者,如果您使用(仅)wget,请执行上述操作并使用 --bind-address 选项绑定到辅助接口。

或者一个不太通用的解决方案,正如 laurent 在 12 月 20 日对另一个答案的评论,您可以为要连接的服务器配置一个特定于 ip 的路由,而无需摆弄多个路由表。像这样:

route add -host [the host you're connecting to] gateway [your gateway address]

这是一个真实的例子。我设置了一个 vpn 连接,vpn 地址是 23.21.xxx.yyy,我的本地外部地址是 91.157.xxx.yyy,我的本地内部网关地址是 192.168.0.1。

root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        23.21.xxx.yyy
root@dell64:~# route add -host ipchicken.com gateway 192.168.0.1
root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        91.157.xxx.yyy

(ipchicken.com 网站只显示您的外部 ip 地址,并且 grep 只过滤包含外部 ip 地址的行,sed 将最后部分替换为 xxx.yyy)

答案2

如果“使用”是指接收请求和服务网站,则需要配置 Apache(或您的 Web 服务器)以使用Listen vpnIP:80和执行此操作Listen vpnIP:443。因此它不适用于其他 IP。

另外使用 iptables,您可以 DROP eth0 的端口 80 和 443,并且仅允许在 VPN 接口(我下面使用了 tun0)上使用;

-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j DROP
-A INPUT -i tun0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i tun0 -p tcp -m tcp --dport 443 -j ACCEPT

如果“使用”指的是传出连接(浏览网页),一种方法是在服务器上(或 VPN 中的某个位置)安装代理(如 squid),并将代理配置为通过 VPN 默认网关发送所有流量。您可以使用 iptables NAT 表将端口 80 和 443 重定向到代理端口(squid 为 3128),方法是:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:3128
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 3128

假设:

tun0 = vpn interface
192.168.1.2 = IP of your server on tun0 (vpn)

对端口 443 执行相同操作。

可能需要一些测试和调整,但如果这样做,这是一般的行为。

相关内容