当我在 ubuntu 服务器 20.04 中使用命令 [sudo iptables -t nat -A POSTROUTING -j MASQUERADE] 时,我失去了解析网站的能力

Kyl*_*oux 2 networking linux router iptables ubuntu

我试图在 ubuntu 服务器上制作一个路由器来完成课堂作业。我一直在查看许多指南来执行此操作,其中大多数都提到使用标题中的命令。如果没有该命令,我无法与路由器后面的任何内容(例如 rdp 或 ssh)进行交互。但是,当输入命令时,当我尝试 [ping google.com] 时,它会停顿一下,然后告诉我“ping:google.com:名称解析暂时失败”。

我想知道我能做些什么来允许流量像原始 iptable 命令一样通过它而不丢失名称解析。

A.B*_*A.B 5

您肯定systemd-resolved在系统上使用 DNS 缓存。可以通过验证是否/etc/resolv.conf包含此条目来检查:

nameserver 127.0.0.53
Run Code Online (Sandbox Code Playgroud)

当对lo接口使用 MASQUERADE 时,这会混淆conntrack,并且来自 DNS 缓存的回复将无法正确返回。只是不要在lo界面上使用 MASQUERADE。

代替:

iptables -t nat -A POSTROUTING -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

和:

iptables -t nat -A POSTROUTING ! -o lo -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)