指定 openvpn/wireguard 服务器出站 ip

指定 openvpn/wireguard 服务器出站 ip

我有一个 VPS,其接口为eth0,有 2 个 IP,10.0.0.3(默认)和10.0.0.5。这 2 个 IP 由 ISP 镜像到外部 IP ,1.0.0.102.0.0.20(据我所知,Google 和 Oracle Cloud 具有类似的机制)。

我只知道如何使用一个 IP 将 tun0 NAT 到 eth0。

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

现在我想通过 NATtun0连接到eth010.0.0.5),该怎么做?

答案1

tun界面无法桥接,因为它不模拟任何链路层协议。tap接口模拟以太网,可以桥接。

tap然而,只有当您确定需要它时才使用桥接,因为tun它得到了更好的支持(例如,它是唯一支持 Android 设备的),并且效率更高,因为它不需要封装链路层报头,从而为有用的数据留下更多空间。

tun将有自己的地址(无论您在 VPN 服务器配置文件中设置哪个)。但是,如果 VPN 数据包通过 路由出去,eth0它们将被转换为您在 上设置的某个地址eth0。哪一个?目前它是随机的;如果您想将 VPN 用户 NAT 到地址10.0.0.5,请删除您的MASQUERADE规则并添加以下SNAT规则:

iptables -t nat -A POSTROUTING -s <vpn-network> -o eth0 -j SNAT --to-source 10.0.0.5

vpn-network类似于10.8.0.0/24或无论您在服务器配置中设置它是什么。


此外,你似乎混淆了绑定学期。

如果你希望 OpenVPN 只接收(加密)数据包10.0.0.5并使用 发送它们10.0.0.5,你需要绑定将其复制到此地址。添加到服务器配置文件中:

local 10.0.0.5

或者在命令行中指定:--local 10.0.0.5

相关内容