我正在尝试使用 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 地址?
我使用的是亚马逊网络服务的服务器,并正在试图建立一个systemd作业需要作为输入AWS外部IP检索的curl
。
[Unit]
Description=My example with AWS external IP
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
Environment=EXTERNAL_IP=$(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)
ExecStart=/path/to/myexample $EXTERNAL_IP
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
验证工具systemd-analyze verify myexample.service
表明curl
环境分配存在问题。
Invalid environment assignment, ignoring: EXTERNAL_IP=$(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)
如果我用curl
硬编码的 IP 字符串替换结果,我的守护进程就会启动。如何curl
在我的 systemd 作业中使用结果?