我需要通过 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.15B2 = 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 子网的网关路由器。
如果您能给我一些有关路由器的信息,我可以告诉您如何添加该路由。