鉴于:我有一台机器(HostA)仅有的一个具有 Internet 连接的 NIC。我有另一台机器(HostB),同一交换机上有一个网卡。主机B是不是尚未配置 Internet 访问。 HostA 已正确配置其默认网关和 DNS 服务器。正在使用 IPv4。主机操作系统为Ubuntu 13和Fedora17。
我想要的是:现在,我希望 HostB 也能连接互联网。是否可以使用iptables
虚拟 tun/tap 设备的“某些”组合或 HostA 和 HostB 之间的 VPN 设置等?
我已经知道并且可以做的:目前,我可以ssh
在 HostB ( ssh -D 9050 UserA@HostA
) 上使用基于 SOCKS 的代理,并通过此代理将 HostB 上选定的“socksulated”应用程序的流量路由到 HostA 及其他位置。然而,遗憾的是,并非所有应用程序都可以进行袜子化。现在,我非常清楚,如果 HostA 有 2 个 NIC,我可以使用一些iptables
规则将 HostA 转换为网关,然后在其 NIC-1 和 NIC-2 之间路由流量(其中 NIC-1 将连接到 HostB, NIC-2 到互联网)。但是在 HostA 中安装另一个网卡对我来说是不可行的。
PS:我有过早些时候发布过这个在 superuser.com 上但没有得到有用的信息。
编辑1:
网络信息
主持人甲:
:> ip addr
[...]
2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether d4:be:d9:d5:46:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.22.9/24 brd 192.168.22.255 scope global p4p1
:> ip route
default via 192.168.22.254 dev p4p1 proto static
192.168.22.0/24 dev p4p1 proto kernel scope link src 192.168.22.9
主持人乙:
:> ip addr
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 30:f9:ed:d9:2e:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.22.234/24 brd 192.168.22.255 scope global eth0
:> ip route
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.22.0/24 dev eth0 proto kernel scope link src 192.168.22.234 metric 1
答案1
路由是关于“发送到哪里(以及是否)”。这不仅限于选择 NIC。在你的情况下,路由非常简单。
您需要以最简单的形式进行伪装(主机 A 上的所有命令):
iptables -t nat -I POSTROUTING -s 192.168.22.234 -j MASQUERADE
也许(如果还没有)您需要允许转发:
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s 192.168.22.234 -j ACCEPT
假设主机 A 配置为主机 B 的默认网关。
编辑1:
经过一番聊天讨论,情况已经比较清楚了。理论上在 B 上配置默认网关就足够了。但似乎网关(不在提问者的控制之下)阻止了主机B。因此,伪装解决方案是必要的。