为 SSH 和 Samba 设置 iptables(NAT/PAT)

为 SSH 和 Samba 设置 iptables(NAT/PAT)

我需要通过 SSH 和 Samba 访问隐藏/连接在另一个 Linux 机器后面的 Linux 机器。

设置 :-

  
 开关BC
|----| |---| |----| |----|
|eth0|----| |----|eth0| | |
|----| |---| |eth1|----|eth1|
                   |----| |----|

例如,从 A 到 C 的 SSH/Samba

该怎么办?
我在想,仅通过 IP 是无法做到这一点的?或者可以吗?

B 能否说“你好,eth0,如果你在寻找 192.168.0.2,它在 eth1 上”?
这是 NAT 吗?这是一个大型私有网络,那么如果另一台 PC 拥有该 IP 怎么办?!

更可能是 PAT?
A 会说“hi 192.168.109.15:1234”B
会说“hi on eth0,端口 1234 的流量从这里进入 eth1”
这该怎么做?

SSH/Samba 守护程序是否可以看到正确的数据包头信息并可以工作?

IP 信息:-

A-eth0-192.168.109.2
B-eth0- B1 = 192.168.109.15 B2 = 172.24.40.130
  - eth1 - 192.168.0.1
C-eth1-192.168.0.2

A、B、C 是 RHEL(RedHat)但 Windows 计算机可以连接到交换机。我配置了 192.168.0.* IP,它们是可更改的。


回复后更新艾迪

问题不多(并且 Machines 的 B IP 不同!)

从 A :-
ssh 172.24.40.130工作正常,(可以到达 B2)
ssh 172.24.40.130 -p 2022 -vv超时 :-

OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 172.24.40.130 [172.24.40.130] port 2022.
...wait ages...
debug1: connect to address 172.24.40.130 port 2022: Connection timed out
ssh: connect to host 172.24.40.130 port 2022: Connection timed out

从 B2 出发:-

$ service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            192.168.0.2         tcp dpt:22

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2022 to:192.168.0.2:22

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

从 B2 到 C 的 ssh 工作正常:-

$ ssh 192.168.0.2

路线信息:-

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
172.24.40.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
default         172.24.40.1     0.0.0.0         UG    0      0        0 eth0

$ ip route  
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.1
172.24.40.0/24 dev eth0  proto kernel  scope link  src 172.24.40.130
169.254.0.0/16 dev eth1  scope link
default via 172.24.40.1 dev eth0

所以我只是不知道为什么端口转发从 A 到 B2 不起作用?

答案1

您所说的 PAT 可以工作。您需要运行 iptables(或某些可自定义的防火墙)。然后运行以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 22 -p DNAT --to-destination 192.168.0.2
iptables -t nat -A PREROUTING -p tcp --dport 135:139 -p DNAT --to-destination 192.168.0.2
iptables -t nat -A PREROUTING -p tcp --dport 445 -p DNAT --to-destination 192.168.0.2
service iptables save
echo 1 > /proc/sys/net/ipv4/ip_forward

在文件 /etc/sysctl.conf 中,更改以下行:

net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1

答案2

对于 SSH

在 B 上:

#Arbitrary port
SOME_PORT=2022
iptables -t nat -I PREROUTING -p tcp --dport $SOME_PORT -j DNAT --to-destination 192.168.0.2:22
iptables -I FORWARD -p tcp --dport 22 -d 192.168.0.2 -j ACCEPT
#On a machine type A:
ssh -p $SOME_PORT

对于桑巴

是否可以通过 B 上的 nfs 安装 C 共享,然后在 B 上设置 samba?如果不行,那么您可以重定向 samba 端口:

iptables -t nat -I PREROUTING -p tcp -m multiport –dports 139,445 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -p udp –dport 137:138 -j DNAT --to-destination 192.168.0.2

如果 samba 已经在 B 上运行,那么您可以在 B 上绑定一个额外的 IP 地址并转发到 C(您也可以对 ssh 执行此操作以保留端口 22。警惕从 0.0.0.0 地址启动的服务):

ifconfig eth0:1 192.168.109.16 netmask 255.255.255.0

iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p tcp -m multiport –dports 139,445 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p udp –dport 137:138 -j DNAT --to-destination 192.168.0.2

编辑 我发现您仍然遇到问题;请确保:

  • 机器 B 已启用 ip 转发: echo 1 > /proc/sys/net/ipv4/ip_forward
  • 机器 C 有通过机器 B 返回用户的路由。如果没有,则在机器 B 上设置伪装规则:

    iptables -t nat -I POSTROUTING -d 192.168.0.2 -p tcp --dport 22 -j MASQUERADE

tcpdump 有助于排除故障。在机器 B 上:

#capture and display packets heading to 192.168.0.2
tcpdump -i any -p tcp ip host 192.168.0.2 and port 22

答案3

嗯。假设交换机始终将流量路由到机器 B,您可以这样做:

route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1

这应该告诉机器 B,如果流量来自 192.168.0.0/24,则将其从 eth1 发送出去。

这应该可行,而且比设置 NAT 要简单一些。您需要确保交换机知道将 192.168.0.0/24 的流量路由到 192.168.109.15(B 上的 Eth 0)。

@Ian:路由并不一定容易,但也不是那么难。这就是路由器的作用。假设您的交换机只是一个交换机,没有路由功能,您就不能用它来设置路由,但您必须在某处有一个路由器,否则您的网络就是纯粹的本地局域网,没有互联网接入。

检查您的机器,并找出默认网关的位置(在 Linux 机器上,您只需输入route不带参数的命令即可。您的默认网关路由如下所示:

default         192.168.1.1      0.0.0.0         UG    0      0        0 eth0

这是您的“核心”路由器。所有机器都会通过它来确定其他子网上的机器的位置。您需要在此处添加一条指向 B 机器的路由,作为 192.168.0.0/24 子网的网关路由器。

如果您能给我一些有关路由器的信息,我可以告诉您如何添加该路由。

相关内容