可以使用 iptables 将单宿主主机转换为 NAT 服务器吗?

可以使用 iptables 将单宿主主机转换为 NAT 服务器吗?

鉴于:我有一台机器(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。因此,伪装解决方案是必要的。

相关内容