我有一个 VPS,其接口为eth0
,有 2 个 IP,10.0.0.3
(默认)和10.0.0.5
。这 2 个 IP 由 ISP 镜像到外部 IP ,1.0.0.10
。2.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
连接到eth0
(10.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
。