首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过TUN接口路由所有流量

通过TUN接口路由所有流量
EN

Server Fault用户
提问于 2021-01-03 13:23:37
回答 1查看 3.5K关注 0票数 1

我希望我所有的流量都通过TUN接口。

因此,正如您所看到的,流量从每个程序被路由到TUN地址的10.0.0.1地址。然后,附加到TUN上的程序处理数据包,然后将它们发送到192.168.1.1上的路由器。然后,它们被路由到Internet上(例如,我的代理服务器,但实际上对我的问题并没有多大影响)。

因此,我的目标就是以这种方式路由流量:$any_program <-> tunX <-> 192.168.1.1 (the router) (<--> thing意味着输入和输出的流量)。

到目前为止我所做的:

  1. 首先,我用以下函数初始化了tunX设备:
代码语言:javascript
复制
int tun_open(char *device)
{
    struct ifreq ifr;
    int fd, err;
    
    fd = open("/dev/net/tun", O_RDWR);
    if (fd == -1)
    {
        perror("opening /dev/net/tun");
        exit(1);
    }

    memset(&ifr, 0, sizeof (ifr));
    ifr.ifr_flags = IFF_TUN;
    strncpy(ifr.ifr_ifrn.ifrn_name, device, IFNAMSIZ);
    
    err = ioctl(fd, TUNSETIFF, (void *) &ifr);
    if (err == -1)
    {
        perror("ioctl TUNSETIFF");
        close(fd);
        exit(1);
    }

    return fd;
}

然后:

代码语言:javascript
复制
tunfd = tun_open("tun6");

另外,我启用了TUNSETPERSIST

代码语言:javascript
复制
ioctl(tunfd, TUNSETPERSIST, 1) < 0);
  1. 然后,我使用以下命令设置该设备:
代码语言:javascript
复制
$ sudo ip addr add 10.0.0.1/24 dev tun6
$ sudo ip link set tun6 up                                                 

程序从tunfd中读取并输出内容。到目前为止,它唯一读到的内容如下:

代码语言:javascript
复制
:B\{k
HOST: 239.255.255.250:1900
MAN: "ssdp:discover" 
MX: 1
ST: urn:dial-multiscreen-org:service:dial:1
USER-AGENT: Google Chrome/86.0.4240.198 Linux

%   N%*.%K%M%P%M%M%M%HP%,%M%*K%(aP%>O%M%LqP%@K%`P%P%Ҵ u@=U繤湤}=UoK%0=U

发现?为什么这个要通过我的tun界面?

route -n的输出:

代码语言:javascript
复制
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    600    0        0 wlp2s0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun6
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp2s0

我一直在玩iptablesip route程序,但在所有这些方面我都是新手。据我所知,iptables实际上并不是路由数据包,而是过滤它们(我可能大错特错)。那么,有办法用ip route路由数据包吗?

EN

回答 1

Server Fault用户

发布于 2021-01-10 23:06:38

正常路由基于目的地,而不是接口(除非配置基于策略的路由),因此需要将所有出站流量路由到10.0.0.0/24网络:

代码语言:javascript
复制
ip route del default
ip route add default via 10.0.0.254

实际上,在10.0.0.0/24中通过哪个地址发送它并不重要,它应该到达您的程序。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1048393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档