我有两个接口:eth0 和 tun5。eth0 是到路由器的以太网,tun5 是 VPN 隧道。它们位于基于 Linux 的 UnRaid 服务器上。它是一台无头服务器,所以我通过 SSH 访问它。
我希望所有流量都通过 VPN、tun5,除了端口 X、Y 和 Z(我希望它们通过以太网来往)。
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:19:66:e6:bb:52 txqueuelen 1000 (Ethernet)
RX packets 21687 bytes 7281101 (6.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64398 bytes 5734722 (5.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 3496 bytes 942735 (920.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3496 bytes 942735 (920.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun5: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.119.1.6 netmask 255.255.255.255 destination 10.119.1.5
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 9 bytes 764 (764.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 1 0 0 eth0
10.119.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun5
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
ip route
default via 192.168.1.1 dev eth0 metric 1
10.119.1.5 dev tun5 proto kernel scope link src 10.119.1.6
127.0.0.0/8 dev lo scope link
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.11
路由器为其分配了一个 IP 192.168.1.11,这就是我用来 SSH 的 IP。
有人能帮我找出一些路线吗?我尝试过以下方法: http://lartc.org/howto/lartc.rpdb.multiple-links.html和 http://www.linuxhorizon.ro/iproute2.html 但我在最后被锁定在 SSH 之外,无法继续。如果我可以直接访问控制台,我是否走在正确的轨道上?
答案1
路由发生在 IP 层,端口始于 TCP 层。因此您不能使用路由来切换端口。
如果您想使用 iptables,您可以尝试这种方法:iptables 将特定端口转发到特定网卡 (StackOverflow)
标记需要经过的包裹
eth1
:iptables -A PREROUTING -i eth0 -t mangle -p tcp --dports 22,53,80,443 -j MARK --set-mark 1
添加规则
eth1.out
来路由标记的包裹:echo "201 eth1.out" >> /etc/iproute2/rt_tables ip rule add fwmark 1 table eth1.out
通过以下方式路由所有标记的包裹
eth1
:/sbin/ip route add default via 192.168.2.1 dev eth1 table eth1.out
其他所有路由通过
eth2
:/sbin/ip route add default via 192.168.3.1 dev eth2
如果
MARK
规则不起作用,请尝试使用CONNMARK
。
你也可以告诉 ssh 使用特定地址连接到服务器。你可以使用
ssh <user>@<host> -b <IP to bind>
或者你可以在 ~/.ssh/config 中像这样更永久地设置它
Host <alias name>
HostName <remote hostname>
BindAddress <IP to bind>
<IP to bind>
在这种情况下192.168.1.11
。