主机 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。