我有三台机器:一台本地电脑(公共 IP 1.2.3.4)、一个数据中心的 Ubuntu 10 服务器盒(公共 IP 5.6.7.8 上的 eth0)以及一个托管我网络之外的网站的第三方服务器(假设是 216.34.181.45 上的 Slashdot)。
- 使用 iptables,如何使用 5.6.7.8:8080 从本地机器访问 Slashdot?
- 如果 Slashdot 与我的 Ubuntu 机器位于同一个 LAN 上,这个过程会有所不同吗?
- 这可以仅通过 NAT PREROUTING/POSTROUTING 来完成吗,还是需要 MASQUERADE?
答案1
PC ----- Ubuntu 10 Server ----- Slashdot
(1.2.3.4) (5.6.7.8) (216.34.181.45)
在 Ubuntu 上启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
并添加以下规则:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j DNAT \ --to-destination 216.34.181.45:80 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 5.6.7.8
不。
如果 Ubuntu 具有动态 IP,则应使用 MASQUERADE:
iptables -t nat -A POSTROUTING -j MASQUERADE
在这种情况下,您还可以通过在 Ubuntu 上执行以下命令来使用 SSH 本地端口转发:
$ ssh -L 5.6.7.8:8080:216.34.181.45:80 -N [email protected]
还有另一种(或更多)方法可以做到这一点。看看rinetd:
Name : rinetd
Arch : i386
Version : 0.62
Release : 6.el5.art
Size : 41 k
Repo : installed
Summary : TCP redirection server
URL : http://www.boutell.com/rinetd
License : GPL
Description: rinetd is a daemon which redirects TCP connections from one IP address
: and port to another IP address and port. This daemon is often used to
: access services behind a firewall.
配置非常简单。将以下行添加到/etc/rinetd.conf
:
5.6.7.8 8080 216.34.181.45 80
并开始:
# /etc/init.d/rinetd start
Starting rinetd: [ OK ]
它将为您做一切。