如何通过另一台主机路由主机的网络流量?

Har*_*rry 10 traffic routing linux-networking

我不是我们公司网络的系统管理员,但我有两个 Linux 工作站(主机 A 和 B),它们都具有 root 访问权限。

两个主机都可以很好地看到对方(ssh、ping 等从一个到另一个工作)。但是,只有主机 A 可以伸出我们公司的防火墙并访问 Internet 等;主机 B 不能。

问题:如何在不涉及我的系统管理员的情况下通过主机 A 路由主机 B 上的所有(而不仅仅是 HTTP)传出和传入网络流量?现在,我不知道是否需要对主机 B 使用 NAT,和/或将主机 A 设为代理服务器,和/或将主机 A 设为路由器。

在主机 B 上,我尝试发出route add -host <HostA> gw <HostA's Gateway>命令,但没有奏效:我无法ping从主机 B访问www.google.com。请原谅我对路由/网络这个主题的无知。

DrG*_*ill 17

您有多种解决方案可以做到这一点:

更简单的方法:NAT

通过允许转发使 A 成为路由器:sysctl net.ipv4.ip_forward=1 放入 net.ipv4.ip_forward=1/etc/sysctl.conf 以使其永久化。

然后在 A, nat trafic 输入: iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE

最后在 B 上:通过 A 路由所有流量:

ip route del default  
ip route add default via IP_of_A
Run Code Online (Sandbox Code Playgroud)

其他解决方案:代理

但是您需要设置所有组件才能使用代理:

在 B 上,使用以下命令打开到 A 的 SSH 连接:

ssh -D8000 -N -f user@IP_of_A 
Run Code Online (Sandbox Code Playgroud)

这将在 B 上打开一个代理 sock 并通过 A 中继所有流量。例如,如果您使用网络浏览器,则需要在 127.0.0.1 上设置一个代理 sock v5,监听端口 8000。您不需要设置 ip转发或触摸路由。