通过 IPIP 隧道路由流量

通过 IPIP 隧道路由流量

主机 A --internet-- 主机 B --internet ipip 隧道-- 主机 C

主机 A:1.1.1.1 主机 B:2.2.2.2 主机 C:3.3.3.3

Ubuntu 18.04。

主机 B ipip 隧道配置

ip tunnel add tunnel0 mode ipip remote 3.3.3.3 local 2.2.2.2
ip addr add 10.0.0.0/32 dev tunnel0
ip link set tunnel0 up
ip route add 10.0.0.1/32 dev tunnel0

主机 C ipip 隧道配置

ip tunnel add tunnel0 mode ipip remote 2.2.2.2 local 3.3.3.3
ip addr add 10.0.0.0/32 dev tunnel0
ip link set tunnel0 up
ip route add 10.0.1.1/32 dev tunnel0

sysctl net.ipv4.ip_forward=1

隧道已启动,两个主机均可 ping 通远端的本地 IP(10.x)。

我正在尝试将流量从主机 A 通过端口 6300 转发到主机 B 再到主机 C。

我们不能从主机 C 经由主机 B 放置一条到 1.1.1.1 的路由,因为主机 A 的 IP 可以更改为任何值。

我们不能设置从主机 C 到主机 B 的默认路由,因为并非所有流量都来自主机 B。

基本上,我希望主机 C 仅通过流量传入的接口回复任何传入流量。

来自 1.1.1.1 的流量通过隧道 0 到达?将回复发送至隧道 0。来自 1.1.1.1 的流量通过 xxx0 到达?将回复发送至 xxx0。来自 xyzw 的流量通过接口 xxx0 到达?将回复发送至 xxx0。

禁止 NAT。过滤是在主机 C 上进行的,因此主机 C 必须知道主机 A 的 IP。

在 Host BI 上尝试

iptables -A FORWARD -i eth0 -o tunnel0 -j ACCEPT
iptables -A FORWARD -i tunnel0 -o eth0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 6300 --jump DNAT --to-destination 10.0.0.1

但这并没有什么作用。来自 1.1.1.1 的流量不会通过隧道 0。

我甚至不知道我应该调查什么。转发?路由?iptables?标记?任何关于我应该做什么的指示都将不胜感激!

编辑 在主机 B 上添加了这些命令

sysctl net.ipv4.conf.eth0.forwarding=1
sysctl net.ipv4.conf.tunnel0.forwarding=1

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 6300 -j DNAT --to-destination 10.0.0.1:6300
iptables -A FORWARD -p tcp -d 10.0.0.1 --dport 6300 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

现在,来自主机 A 的流量进入通往主机 C 的隧道!进展顺利!

但没有回程流量。

我尝试将其添加到主机 C 中,以便源路由数据包

ip rule add table 11 from 10.0.0.1/32 dev tunnel0
ip route add table 11 to default via 10.0.0.1 dev tunnel0

但没有运气。我输入的命令有什么明显错误吗?-谢谢

答案1

破解了它。

主机B

sysctl net.ipv4.ip_forward=1
sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.tunnel0.forwarding=1

ip tunnel add tunnel0 mode ipip remote 3.3.3.3 local 2.2.2.2
ip addr add 10.0.1.1/32 dev tunnel0
ip link set tunnel0 up
ip route add 10.0.0.1/32 dev tunnel0

iptables -A FORWARD -i eth0 -o tunnel0 -j ACCEPT
iptables -A FORWARD -i tunnel0 -o eth0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 6300 -j DNAT --to-destination 10.0.0.1:6300
iptables -A FORWARD -p tcp -d 10.0.0.1 --dport 6300 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

主机C

sysctl net.ipv4.ip_forward=1
sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.tunnel0.forwarding=1

ip tunnel add tunnel0 mode ipip local 3.3.3.3 remote 2.2.2.2
ip addr add 10.0.0.1/32 dev tunnel0
ip link set tunnel0 up
ip route add 10.0.1.1/32 dev tunnel0

ip rule add from 10.0.0.1 lookup 11
ip route add table 11 to default via 10.0.0.1 dev tunnel0

现在,通过端口 6300 从 A 发送到 B 的所有流量都透明地转发到 C。C 看到流量来自 A,并将流量发送回 B。

相关内容