背景:我正在做一个UDP打孔服务,为了区分同一公共IP下的用户,我想过让用户也发送他们的本地IP。这样,我用 1 块石头杀死了 2 只鸟:客户端是唯一标识的,同时还使服务器为用户提供建立直接连接(如果可能),而不是发夹。
一切似乎都很完美(尤其是独特的标识),直到我意识到这是可能的:

所以这里是实际的问题:这种情况有多普遍,如果它们甚至被使用,以及在哪里使用?
我正在尝试将 linux 服务器配置为网关/路由器,但我无法让它工作,而且我设法找到的所有信息都与 NAT 相关。
我有一个用于网关和它后面的设备的公共 IP 块,所以我希望网关简单地将数据包路由到互联网 - 再次:没有 NAT!
我已经设法让网关成功访问互联网(这只是配置 IP 和 GW 的问题),并且它后面的计算机可以与其通信。
[编辑:更多信息]
这实际上是一个 IPv6 块 ( 2800:40:403::0/48)(但我发现大多数实用程序和指令都可以轻松地从 IPv4 适应到 IPv6)。
服务器有太多端口:
2800:40:403::1/482800:40:403::3/48它后面的一台计算机通过交换机连接到它;
2800:40:403::7/48服务器上的 wan 接口可以 ping6 www.google.com 没有问题。服务器和客户端上的 LAN 接口可以相互 ping 没有问题(以及 SSH 等)。
我尝试将服务器设置为客户端的默认网关,但没有运气:
client # route -A inet6 add default gw 2800:40:403::3 dev eth1
server # cat /proc/sys/net/ipv6/conf/all/forwarding
1
Run Code Online (Sandbox Code Playgroud)
我不想要任何过滤/防火墙/等,只是简单的路由。
谢谢。
我目前正在为一堆域运行一个权威的 Bind9 DNS 服务器。这个权威服务器当前复制到几个从属服务器,然后用于满足 DNS 的子网要求。该服务器当前安装在具有静态 WAN IP 的裸机上。
我想将此服务器移到 NAT 后面的虚拟机中。由于我对 DNS 不太了解,所以我一直在徘徊:在 NAT 后面运行权威 DNS 时是否需要注意任何特殊限制?我可以共享 IP 并路由只绑定特定端口,还是需要为 DNS 服务保留和路由完整 IP?
我正在设置一个笔记本用于软件演示目的。该机器拥有 8GB RAM、Core i7 Intel CPU、128GB SSD,运行 Ubuntu 12.04 LTS 64 位。该笔记本电脑用作 KVM 主机并运行一些 KVM 来宾。
所有此类来宾都使用virbr0默认网桥。为了使它们能够使用多播相互通信,我将以下内容添加到主机的 中/etc/sysctl.conf,如下所示
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
Run Code Online (Sandbox Code Playgroud)
随后,man sysctl(8)我发布了以下内容:
sudo /sbin/sysctl -p /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)
我的理解是,这应该使这些设置在重新启动后仍然存在。我测试了它,并惊讶地发现以下内容:
root@sdn1 :/proc/sys/net/bridge# more *tables
::::::::::::::
bridge-nf-call-arptables
::::::::::::::
1
::::::::::::::
bridge-nf-call-ip6tables
::::::::::::::
1
::::::::::::::
bridge-nf-call-iptables
::::::::::::::
1
Run Code Online (Sandbox Code Playgroud)
所有默认设置都将恢复!
是的。我可以使用一些笨拙的“解决方法”,例如将 a/sbin/sysctl -p /etc/sysctl.conf放入主机中,/etc/rc.local但我宁愿“做对”。我是否误解了手册页或者我错过了什么?
感谢您的任何提示。
——扎克
我正在尝试将 linux box 设置为路由器,但我对以下规则将如何影响数据包感到有些困惑。
例如在路由表中我可以有
default via 10.10.1.1 dev eth0 src 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
将数据包的源 IP 地址更改为 192.168.1.1
在 iptables 中,我可以拥有
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth0 -j SNAT --to 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
这似乎也要求下一跳返回数据包应该去 192.168.1.1
那么有什么区别呢?
我在 AWS VPC 内运行我自己的 NAT 实例。我想确保 NAT 实例不会成为瓶颈,为此我想为何时扩展到辅助 NAT(如果有的话)设定我自己的期望。
我知道实例类型(当前是 m1.medium,如果这很重要)是其中的一个重要方面,但想知道如何检查 NAT 实例是否开始达到其最大值以及我是否可以实现更好的吞吐量VPC 中的机器,如果其中一些机器使用不同的 NAT 实例。
它通过一个非常简单的 iptables 指令进行 NAT,如下所示:
$ iptables --table nat --list
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.0.0/16 anywhere
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 hello-world 示例设置位于 NAT 后面的云 Asterisk 服务器。我有 NAT 问题。Asterisk 通过 SDP 提供给客户端的 IP 地址是它在 NAT 后面的本地地址,而不是外部地址。
我试图在 中设置externip值sip.conf,但这似乎没有效果。
[general]
externip=xxx.yyy.zzz.vvv
nat=yes
tcpenable=yes
Run Code Online (Sandbox Code Playgroud)
客户端收到的SDP与服务器externip设置不一致:
v=0
o=root 291445984 291445984 IN IP4 172.31.46.110
s=Asterisk PBX 11.7.0~dfsg-1ubuntu1
c=IN IP4 172.31.46.110
t=0 0
m=audio 10078 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv
m=video 0 RTP/AVP 96
Run Code Online (Sandbox Code Playgroud)
我希望 SDP 中的地址与externip字段中提供的地址相匹配。我已经尝试了实际 IP 地址和服务器名称,它们通过 DNS 正确解析为 IP 地址。
我设置的externip值不正确吗?或者是否需要不同的设置来让 Asterisk 通告其外部 IP 地址?
IPv4 需要 NAT 来保护地址。NAT 的防火墙特性也有利于安全。IPv4 NAT 防火墙规则是“阻止传入数据包remote-address:port -> local-address:port,除非local-address:port -> remote-address:port在最后 X 秒内发送传出数据包”。
对于点对点 UDP 应用程序,这需要介绍服务器来进行 NAT 打孔。对于Client连接到Server(包括有防火墙的NAT后面,FW),我们需要进行如下操作的情况发生:
periodic
keep-alive
Introducer <------>
Client FW FW Server
------------------------------------------
request
introduction
-------> Introducer
Client FW FW Server
--------------------->X
request connection
------------------------------------------
notify
introduction
[Client address:port]
Introducer ------->
Client FW FW Server
------------------------------------------
Client FW FW Server
<---------------------------
hello
------------------------------------------
Client FW FW Server
--------------------------->
request connection
------------------------------------------
Client FW FW Server …Run Code Online (Sandbox Code Playgroud) 您会在每个可用区上为 HA 配置一个 NAT 网关吗?这是矫枉过正吗?每年连续运行的成本超过 500 美元。对于关键业务系统来说,它确实有意义。您可以在 2 个可用区上创建 2 个 NAT 网关,并让第三个使用一个或另一个以减少一些 $。
我的另一个问题是,如果一个可用区出现故障,您如何自动切换到另一个可用区上的 NAT 网关?据我所知,您需要手动更新路由表以指向另一个 NAT 网关。人们是否设置了对 NAT 实例的定期 ping,然后在失败时更新路由表?如果是这种情况,假设无论如何都会出现小故障,为什么不在旧的 AZ 出现故障时在另一个 AZ 上创建一个新的 NAT 网关,然后更新路由表?您将节省 500 美元并实现相同的目标。
我有一个 VPN 线卫虚拟接口wg0(可以是其他任何接口)和一个物理接口eth0。我想将数据包从 VPN 路由到 LAN,或者从一个接口路由到另一个接口。
几乎所有博客、文章、教程都建议使用MASQUERADE或Source NAT仅使用:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
而且,IP masquerade只是一个SNAT(源NAT),它不会改变源端口。
主机生成并从wg0(或任何其他虚拟/物理接口)转发的数据包之间可能存在(源端口)冲突。恕我直言,必须使用 NAPT 来避免这些冲突。