我有一个“安全”调制解调器,当内部访问时,它会将我的外部 IP 重定向到其配置页面。在下图中:
10.0.0.1 +-------+ 1.2.3.4
+-----+ Modem |<---------+Internet
| +-------+
|
|
| +--------+ 192.168.1.1
+---->| Router +------+
10.0.0.253 +--------+ |
|
+--------+ |
| Server |<-----+
+--------+ 192.168.1.3
我已在调制解调器上配置了 DMZ 10.0.0.253
(路由器),并在路由器上配置了 DMZ 192.168.1.3
(服务器)。
nathan@InternetDevice $ curl 1.2.3.4
Hello from Server!
nathan@Server $ curl 1.2.3.4
<!DOCTYPE html>
...
blah blah router config page
...
我想将路由器配置为自动将任何 TCP、UDP 或 ICMP 连接从 重新192.168.1.x
路由到1.2.3.4
,192.168.1.3
并且透明。如果有更好的方法来实现这一点(除了使用不太“特殊”的调制解调器),我也会接受。
调制解调器本质上是一个黑匣子,但路由器和服务器都运行 Linux。目前,我有一个主机名,全局解析为1.2.3.4
,但路由器的 DNS 服务器解析为192.168.1.3
。但是,这在 Chrome OS 设备上失败了,因为 Chrome OS 设备总是使用 Google 的 DNS,感觉很奇怪。
答案1
我最终写了一个脚本......
PUBLIC_IP="$(curl ipinfo.io/ip 2>/dev/null)";
DMZ_IP="192.168.1.3";
add_rule() {
iptables -t nat -A PREROUTING --dst "${PUBLIC_IP}" --protocol "${1}" --match "${1}" --jump DNAT --to-destination "${DMZ_IP}";
};
add_rule tcp;
add_rule udp;
iptables -t nat -A POSTROUTING -j MASQUERADE;