如何使用定义的本地 IP 而不是外部 IP

Gee*_*gus 2 networking ip route

我有一台 Gentoo Linux 服务器。服务器连接到两个网络:内部和外部。

Internal network ip: 192.168.1.200
External network ip: 192.168.0.2
Run Code Online (Sandbox Code Playgroud)

如果我试图从服务器向自身发出请求,它会使用外部网络 IP。使用 Wget 连接到 nginx 给了我这个日志记录:

server ~ # tail -n 1 /var/log/nginx/error_log
192.168.0.2 - - [27/Aug/2014:19:04:42 +0300] "GET / HTTP/1.1" 200 5 "-" "Wget/1.14 (linux-gnu)"
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还是直接连接到 192.168.1.200:

server ~ # wget http://192.168.1.200/
Run Code Online (Sandbox Code Playgroud)

路由表(外部网络上的度量更高,但似乎被忽略了): ip route show

server ~ # ip route
192.168.0.0/30 dev wan  scope link  metric 20 
192.168.1.0/24 dev lan  scope link  metric 10 
Run Code Online (Sandbox Code Playgroud)

ip 路由获取

server ~ # ip route get 192.168.1.200
local 192.168.1.200 dev lo  src 192.168.1.200 
    cache <local> 
Run Code Online (Sandbox Code Playgroud)

如何让这台机器使用 192.168.1.200 而不是 192.168.0.2 连接到自身?

cuo*_*glm 6

如果你运行的每个程序都有这个问题,你应该检查你的服务器防火墙规则。确保它仅NAT用于外部目的地。如果你有一个广泛的NAT规则,你的路由表就没有意义。

修复防火墙规则后,对于wget,您可以使用--bind-addressoption 选择要使用的接口:

wget --bind-address=192.168.1.200 http://192.168.1.200/
Run Code Online (Sandbox Code Playgroud)

wget 文档

'--绑定地址=地址'

在建立客户端 TCP/IP 连接时,绑定到本地计算机上的 ADDRESS。ADDRESS 可以指定为主机名或 IP 地址。如果您的机器绑定到多个 IP,此选项会很有用。

您可以使用.wgetrc文件使其永久化。