Making a server behind a VPN client remain reachableReply on the same interface as incoming with DNATed IPRoute certain domains through different interfacesSetting up a server that routes local traffic through vpn, while still being able to access internet directlyCan I assign a virtual interface (VPN) to a 'real' interface / NIC of my choice?Linux tun interface packet routingDouble VPN (OpenVPN)connect to 3rd party VPN server but don't use it as the default route?Mikrotik with vpn client doesn't route mangled packets wellHow to connect 3 Openvpn Ubuntu ServersVPN Router does not reply to ARP RequestsDouble VPN client->server->client

What's the safest way to inform a new user of their password on my web site?

How do I reference other list in calculated column?

One folder two different locations on ubuntu 18.04

What is the consensus on handling pagination in 2019 on big result sets?

Quacks of Quedlingburg Crow Skull Set 2 Keep Drawing

Can a single server be associated with multiple domains?

Why won't the ground take my seed?

Why is Madam Hooch not a professor?

What could a reptilian race tell by candling their eggs?

Why transcripts instead of degree certificates?

Zombie diet, why humans?

Most possible movement by the losing side in a zugzwang position

How do accents of a whole town drift?

I am having a problem understanding the different behavior of $("button").click() and $("button")[0].click()

User command to reload file-local variables

How to start learning the piano again

For people who believe in Jesus and not the devil, what happened in the desert?

Getting geometries of hurricane's 'cone of uncertainty' using shapely?

What are good ways to spray paint a QR code on a footpath?

Should the Torah be covered or uncovered during the Aliyah blessings?

What does Mildred mean by this line in Three Billboards Outside Ebbing, Missouri?

Fluently Validation of Objects

What is the olden name for sideburns?

Why are 120V general receptacle circuits limited to 20A?



Making a server behind a VPN client remain reachable


Reply on the same interface as incoming with DNATed IPRoute certain domains through different interfacesSetting up a server that routes local traffic through vpn, while still being able to access internet directlyCan I assign a virtual interface (VPN) to a 'real' interface / NIC of my choice?Linux tun interface packet routingDouble VPN (OpenVPN)connect to 3rd party VPN server but don't use it as the default route?Mikrotik with vpn client doesn't route mangled packets wellHow to connect 3 Openvpn Ubuntu ServersVPN Router does not reply to ARP RequestsDouble VPN client->server->client






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0















I have a server used as a Web and SSH server under Linux. There runs a VPN client, with OpenVPN. If I have properly understood, the VPN changes the routing tables, leading to forwarding all the traffic through the VPN.



Then, when I try to request my Web site hosted on the server, it has become unavailable. I have a very primary knowledge in networking, but what I can assume (feel you free to correct me if I am wrong) is that the request is correctly received by the server through the usual interface, let's name it eth0, but given that the route has changed and passes now through the VPN, the response should be sent on the VPN's interface, which is obviously impossible for security sake.



I looked up the following threads:



https://superuser.com/questions/753736/accessing-a-webserver-hosted-behind-vpn-with-closed-ports-remotely



Reply on the same interface as incoming with DNATed IP



https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming



but unfortunately, they have been unhelpful.



Let's call the VPN's interface tun0. What I would like to do, is to reply to requests on eth0 on the same interface, namely eth0 itself, instead of tun0 as the VPN runs. Another precision, my server is behind a gateway which is different from it (two different IP addresses).



1) Is it possible to do so?



2) What are the different ways to do that?



Thank you in advance for your feedback.










share|improve this question



















  • 1





    It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

    – hargut
    Jun 8 at 18:03











  • The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

    – Moth
    Jun 8 at 18:30






  • 1





    So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

    – hargut
    Jun 8 at 20:31











  • For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

    – Moth
    Jun 8 at 21:44






  • 1





    It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

    – hargut
    Jun 9 at 6:22

















0















I have a server used as a Web and SSH server under Linux. There runs a VPN client, with OpenVPN. If I have properly understood, the VPN changes the routing tables, leading to forwarding all the traffic through the VPN.



Then, when I try to request my Web site hosted on the server, it has become unavailable. I have a very primary knowledge in networking, but what I can assume (feel you free to correct me if I am wrong) is that the request is correctly received by the server through the usual interface, let's name it eth0, but given that the route has changed and passes now through the VPN, the response should be sent on the VPN's interface, which is obviously impossible for security sake.



I looked up the following threads:



https://superuser.com/questions/753736/accessing-a-webserver-hosted-behind-vpn-with-closed-ports-remotely



Reply on the same interface as incoming with DNATed IP



https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming



but unfortunately, they have been unhelpful.



Let's call the VPN's interface tun0. What I would like to do, is to reply to requests on eth0 on the same interface, namely eth0 itself, instead of tun0 as the VPN runs. Another precision, my server is behind a gateway which is different from it (two different IP addresses).



1) Is it possible to do so?



2) What are the different ways to do that?



Thank you in advance for your feedback.










share|improve this question



















  • 1





    It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

    – hargut
    Jun 8 at 18:03











  • The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

    – Moth
    Jun 8 at 18:30






  • 1





    So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

    – hargut
    Jun 8 at 20:31











  • For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

    – Moth
    Jun 8 at 21:44






  • 1





    It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

    – hargut
    Jun 9 at 6:22













0












0








0








I have a server used as a Web and SSH server under Linux. There runs a VPN client, with OpenVPN. If I have properly understood, the VPN changes the routing tables, leading to forwarding all the traffic through the VPN.



Then, when I try to request my Web site hosted on the server, it has become unavailable. I have a very primary knowledge in networking, but what I can assume (feel you free to correct me if I am wrong) is that the request is correctly received by the server through the usual interface, let's name it eth0, but given that the route has changed and passes now through the VPN, the response should be sent on the VPN's interface, which is obviously impossible for security sake.



I looked up the following threads:



https://superuser.com/questions/753736/accessing-a-webserver-hosted-behind-vpn-with-closed-ports-remotely



Reply on the same interface as incoming with DNATed IP



https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming



but unfortunately, they have been unhelpful.



Let's call the VPN's interface tun0. What I would like to do, is to reply to requests on eth0 on the same interface, namely eth0 itself, instead of tun0 as the VPN runs. Another precision, my server is behind a gateway which is different from it (two different IP addresses).



1) Is it possible to do so?



2) What are the different ways to do that?



Thank you in advance for your feedback.










share|improve this question
















I have a server used as a Web and SSH server under Linux. There runs a VPN client, with OpenVPN. If I have properly understood, the VPN changes the routing tables, leading to forwarding all the traffic through the VPN.



Then, when I try to request my Web site hosted on the server, it has become unavailable. I have a very primary knowledge in networking, but what I can assume (feel you free to correct me if I am wrong) is that the request is correctly received by the server through the usual interface, let's name it eth0, but given that the route has changed and passes now through the VPN, the response should be sent on the VPN's interface, which is obviously impossible for security sake.



I looked up the following threads:



https://superuser.com/questions/753736/accessing-a-webserver-hosted-behind-vpn-with-closed-ports-remotely



Reply on the same interface as incoming with DNATed IP



https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming



but unfortunately, they have been unhelpful.



Let's call the VPN's interface tun0. What I would like to do, is to reply to requests on eth0 on the same interface, namely eth0 itself, instead of tun0 as the VPN runs. Another precision, my server is behind a gateway which is different from it (two different IP addresses).



1) Is it possible to do so?



2) What are the different ways to do that?



Thank you in advance for your feedback.







networking vpn routing






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jun 10 at 10:31







Moth

















asked Jun 8 at 12:25









MothMoth

255 bronze badges




255 bronze badges







  • 1





    It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

    – hargut
    Jun 8 at 18:03











  • The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

    – Moth
    Jun 8 at 18:30






  • 1





    So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

    – hargut
    Jun 8 at 20:31











  • For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

    – Moth
    Jun 8 at 21:44






  • 1





    It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

    – hargut
    Jun 9 at 6:22












  • 1





    It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

    – hargut
    Jun 8 at 18:03











  • The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

    – Moth
    Jun 8 at 18:30






  • 1





    So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

    – hargut
    Jun 8 at 20:31











  • For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

    – Moth
    Jun 8 at 21:44






  • 1





    It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

    – hargut
    Jun 9 at 6:22







1




1





It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

– hargut
Jun 8 at 18:03





It is posssible to do such a setup. The question is, what is the purpose of the VPN and which traffic (e.g. destination range) needs to be routed through the VPN tunnel. In such situation I'd try to only route the needed traffic through the tunnel.

– hargut
Jun 8 at 18:03













The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

– Moth
Jun 8 at 18:30





The server is also a PC. I would like to route the browsers and torrent's traffic through the VPN tunnel, while not tunneling the traffic pertaining to server activities.

– Moth
Jun 8 at 18:30




1




1





So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

– hargut
Jun 8 at 20:31





So, in your situation it might be easier to only guide server traffic through eth0. Does the server need to be reachable through vpn inbound traffic?

– hargut
Jun 8 at 20:31













For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

– Moth
Jun 8 at 21:44





For now, no, it does not. 1) How can we do that, namely guiding the server traffic through eth0? 2) But concerning what you pointed out, I wanted to know how to make my server reachable through the VPN inbound traffic, what would be the way to do that please?

– Moth
Jun 8 at 21:44




1




1





It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

– hargut
Jun 9 at 6:22





It is hatd to make any suggestion as there are still too little details on the setup available. The directions could be 1) setup iptable rules that match servers traffic (e.g. source port) and specify the output device device. 2) setup vpn in a routed mode, set iptable rules that match the vpn cidrs and the server traffic, specify the output device tun0. If you have WAN inbound server traffic through VPN it will be more complex. Full details for such setups are not someting that I will do in a serverfault comment. There are too many factors and too little time to explain/clarify all of these.

– hargut
Jun 9 at 6:22










1 Answer
1






active

oldest

votes


















2














Finally, to my problematic I found a solution inspired from:



https://lartc.org/howto/lartc.rpdb.multiple-links.html .



Here is how to proceed.



To configure the routing of the server so that it is attainable behind a VPN client, a separate routing table ought to be used to avoid an overlap of routing configurations of the two interfaces.



Let <interface>, <table>, <ip>, <gateway> and <network> be the interface name, the table, the IP address of <interface>, the gateway's IP address, and the IP address of the network (that provided by the ISP), respectively.



The procedure to follow is:



  1. Creation of the specific routing table of <interface>: creating the new table <table> in /etc/iproute2/rt_tables.



  2. Setting a different routing configuration for the interface associated to <gateway> by means of a specific table.



    The traffic towards <network> is associated to the interface <interface> and follows the specific routing table <table>:



    ip route add <network> dev <interface> src <ip> table <table>



    Building a default route via this gateway:



    ip route add default via <gateway> table <table>




  3. On <interface>, forcing the traffic from <ip> passing through <network>, to use the interface <interface>:



    ip route add <network> dev <interface> src <ip>



    The src argument is specified to make sure the right outgoing IP address is chosen.




  4. Associating the interface to the appropriate <network>:



    ip rule add from <ip> table



Key idea:



The key idea to understand, concerning why to use this technique here, is that for any request passing through the ISP node, here <network>, the latter will be an intermediate node of the response's route. This seems obvious, but forgetting it leads to not understand why <network> does matter in the routing configuration of the interface normally used to communicate with the server from outside.



Optional:




  1. Setting the routes for all destinations to pass through <gateway> instead of through the VPN's gateway. Useful when it is needed to use the VPN only on a case-by-case basis.



    Let <vpn>, and <vpn's gateway> be the interface name of the VPN (generally tun0), and the IP address of the VPN's gateway, respectively. Then, the routes for any destinations passing through the VPN, more accurately its gateway <vpn's gateway>, have to be replaced by routes passing through <gateway>:



ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>


0.0.0.0/1 stands for IP addresses ranging from 0.0.0.1 to 127.255.255.255, and 128.0.0.0/1 from 128.0.0.1 to 255.255.254.



Voilà.






share|improve this answer

























  • Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

    – hargut
    Jun 10 at 10:42











  • Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

    – Moth
    Jun 10 at 14:30











  • The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

    – hargut
    Jun 10 at 14:54












  • Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

    – Moth
    Jun 10 at 20:40












  • Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

    – hargut
    Jun 11 at 5:19













Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "2"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f970661%2fmaking-a-server-behind-a-vpn-client-remain-reachable%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









2














Finally, to my problematic I found a solution inspired from:



https://lartc.org/howto/lartc.rpdb.multiple-links.html .



Here is how to proceed.



To configure the routing of the server so that it is attainable behind a VPN client, a separate routing table ought to be used to avoid an overlap of routing configurations of the two interfaces.



Let <interface>, <table>, <ip>, <gateway> and <network> be the interface name, the table, the IP address of <interface>, the gateway's IP address, and the IP address of the network (that provided by the ISP), respectively.



The procedure to follow is:



  1. Creation of the specific routing table of <interface>: creating the new table <table> in /etc/iproute2/rt_tables.



  2. Setting a different routing configuration for the interface associated to <gateway> by means of a specific table.



    The traffic towards <network> is associated to the interface <interface> and follows the specific routing table <table>:



    ip route add <network> dev <interface> src <ip> table <table>



    Building a default route via this gateway:



    ip route add default via <gateway> table <table>




  3. On <interface>, forcing the traffic from <ip> passing through <network>, to use the interface <interface>:



    ip route add <network> dev <interface> src <ip>



    The src argument is specified to make sure the right outgoing IP address is chosen.




  4. Associating the interface to the appropriate <network>:



    ip rule add from <ip> table



Key idea:



The key idea to understand, concerning why to use this technique here, is that for any request passing through the ISP node, here <network>, the latter will be an intermediate node of the response's route. This seems obvious, but forgetting it leads to not understand why <network> does matter in the routing configuration of the interface normally used to communicate with the server from outside.



Optional:




  1. Setting the routes for all destinations to pass through <gateway> instead of through the VPN's gateway. Useful when it is needed to use the VPN only on a case-by-case basis.



    Let <vpn>, and <vpn's gateway> be the interface name of the VPN (generally tun0), and the IP address of the VPN's gateway, respectively. Then, the routes for any destinations passing through the VPN, more accurately its gateway <vpn's gateway>, have to be replaced by routes passing through <gateway>:



ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>


0.0.0.0/1 stands for IP addresses ranging from 0.0.0.1 to 127.255.255.255, and 128.0.0.0/1 from 128.0.0.1 to 255.255.254.



Voilà.






share|improve this answer

























  • Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

    – hargut
    Jun 10 at 10:42











  • Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

    – Moth
    Jun 10 at 14:30











  • The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

    – hargut
    Jun 10 at 14:54












  • Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

    – Moth
    Jun 10 at 20:40












  • Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

    – hargut
    Jun 11 at 5:19















2














Finally, to my problematic I found a solution inspired from:



https://lartc.org/howto/lartc.rpdb.multiple-links.html .



Here is how to proceed.



To configure the routing of the server so that it is attainable behind a VPN client, a separate routing table ought to be used to avoid an overlap of routing configurations of the two interfaces.



Let <interface>, <table>, <ip>, <gateway> and <network> be the interface name, the table, the IP address of <interface>, the gateway's IP address, and the IP address of the network (that provided by the ISP), respectively.



The procedure to follow is:



  1. Creation of the specific routing table of <interface>: creating the new table <table> in /etc/iproute2/rt_tables.



  2. Setting a different routing configuration for the interface associated to <gateway> by means of a specific table.



    The traffic towards <network> is associated to the interface <interface> and follows the specific routing table <table>:



    ip route add <network> dev <interface> src <ip> table <table>



    Building a default route via this gateway:



    ip route add default via <gateway> table <table>




  3. On <interface>, forcing the traffic from <ip> passing through <network>, to use the interface <interface>:



    ip route add <network> dev <interface> src <ip>



    The src argument is specified to make sure the right outgoing IP address is chosen.




  4. Associating the interface to the appropriate <network>:



    ip rule add from <ip> table



Key idea:



The key idea to understand, concerning why to use this technique here, is that for any request passing through the ISP node, here <network>, the latter will be an intermediate node of the response's route. This seems obvious, but forgetting it leads to not understand why <network> does matter in the routing configuration of the interface normally used to communicate with the server from outside.



Optional:




  1. Setting the routes for all destinations to pass through <gateway> instead of through the VPN's gateway. Useful when it is needed to use the VPN only on a case-by-case basis.



    Let <vpn>, and <vpn's gateway> be the interface name of the VPN (generally tun0), and the IP address of the VPN's gateway, respectively. Then, the routes for any destinations passing through the VPN, more accurately its gateway <vpn's gateway>, have to be replaced by routes passing through <gateway>:



ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>


0.0.0.0/1 stands for IP addresses ranging from 0.0.0.1 to 127.255.255.255, and 128.0.0.0/1 from 128.0.0.1 to 255.255.254.



Voilà.






share|improve this answer

























  • Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

    – hargut
    Jun 10 at 10:42











  • Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

    – Moth
    Jun 10 at 14:30











  • The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

    – hargut
    Jun 10 at 14:54












  • Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

    – Moth
    Jun 10 at 20:40












  • Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

    – hargut
    Jun 11 at 5:19













2












2








2







Finally, to my problematic I found a solution inspired from:



https://lartc.org/howto/lartc.rpdb.multiple-links.html .



Here is how to proceed.



To configure the routing of the server so that it is attainable behind a VPN client, a separate routing table ought to be used to avoid an overlap of routing configurations of the two interfaces.



Let <interface>, <table>, <ip>, <gateway> and <network> be the interface name, the table, the IP address of <interface>, the gateway's IP address, and the IP address of the network (that provided by the ISP), respectively.



The procedure to follow is:



  1. Creation of the specific routing table of <interface>: creating the new table <table> in /etc/iproute2/rt_tables.



  2. Setting a different routing configuration for the interface associated to <gateway> by means of a specific table.



    The traffic towards <network> is associated to the interface <interface> and follows the specific routing table <table>:



    ip route add <network> dev <interface> src <ip> table <table>



    Building a default route via this gateway:



    ip route add default via <gateway> table <table>




  3. On <interface>, forcing the traffic from <ip> passing through <network>, to use the interface <interface>:



    ip route add <network> dev <interface> src <ip>



    The src argument is specified to make sure the right outgoing IP address is chosen.




  4. Associating the interface to the appropriate <network>:



    ip rule add from <ip> table



Key idea:



The key idea to understand, concerning why to use this technique here, is that for any request passing through the ISP node, here <network>, the latter will be an intermediate node of the response's route. This seems obvious, but forgetting it leads to not understand why <network> does matter in the routing configuration of the interface normally used to communicate with the server from outside.



Optional:




  1. Setting the routes for all destinations to pass through <gateway> instead of through the VPN's gateway. Useful when it is needed to use the VPN only on a case-by-case basis.



    Let <vpn>, and <vpn's gateway> be the interface name of the VPN (generally tun0), and the IP address of the VPN's gateway, respectively. Then, the routes for any destinations passing through the VPN, more accurately its gateway <vpn's gateway>, have to be replaced by routes passing through <gateway>:



ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>


0.0.0.0/1 stands for IP addresses ranging from 0.0.0.1 to 127.255.255.255, and 128.0.0.0/1 from 128.0.0.1 to 255.255.254.



Voilà.






share|improve this answer















Finally, to my problematic I found a solution inspired from:



https://lartc.org/howto/lartc.rpdb.multiple-links.html .



Here is how to proceed.



To configure the routing of the server so that it is attainable behind a VPN client, a separate routing table ought to be used to avoid an overlap of routing configurations of the two interfaces.



Let <interface>, <table>, <ip>, <gateway> and <network> be the interface name, the table, the IP address of <interface>, the gateway's IP address, and the IP address of the network (that provided by the ISP), respectively.



The procedure to follow is:



  1. Creation of the specific routing table of <interface>: creating the new table <table> in /etc/iproute2/rt_tables.



  2. Setting a different routing configuration for the interface associated to <gateway> by means of a specific table.



    The traffic towards <network> is associated to the interface <interface> and follows the specific routing table <table>:



    ip route add <network> dev <interface> src <ip> table <table>



    Building a default route via this gateway:



    ip route add default via <gateway> table <table>




  3. On <interface>, forcing the traffic from <ip> passing through <network>, to use the interface <interface>:



    ip route add <network> dev <interface> src <ip>



    The src argument is specified to make sure the right outgoing IP address is chosen.




  4. Associating the interface to the appropriate <network>:



    ip rule add from <ip> table



Key idea:



The key idea to understand, concerning why to use this technique here, is that for any request passing through the ISP node, here <network>, the latter will be an intermediate node of the response's route. This seems obvious, but forgetting it leads to not understand why <network> does matter in the routing configuration of the interface normally used to communicate with the server from outside.



Optional:




  1. Setting the routes for all destinations to pass through <gateway> instead of through the VPN's gateway. Useful when it is needed to use the VPN only on a case-by-case basis.



    Let <vpn>, and <vpn's gateway> be the interface name of the VPN (generally tun0), and the IP address of the VPN's gateway, respectively. Then, the routes for any destinations passing through the VPN, more accurately its gateway <vpn's gateway>, have to be replaced by routes passing through <gateway>:



ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>


0.0.0.0/1 stands for IP addresses ranging from 0.0.0.1 to 127.255.255.255, and 128.0.0.0/1 from 128.0.0.1 to 255.255.254.



Voilà.







share|improve this answer














share|improve this answer



share|improve this answer








edited Jun 11 at 10:41

























answered Jun 10 at 9:30









MothMoth

255 bronze badges




255 bronze badges












  • Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

    – hargut
    Jun 10 at 10:42











  • Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

    – Moth
    Jun 10 at 14:30











  • The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

    – hargut
    Jun 10 at 14:54












  • Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

    – Moth
    Jun 10 at 20:40












  • Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

    – hargut
    Jun 11 at 5:19

















  • Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

    – hargut
    Jun 10 at 10:42











  • Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

    – Moth
    Jun 10 at 14:30











  • The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

    – hargut
    Jun 10 at 14:54












  • Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

    – Moth
    Jun 10 at 20:40












  • Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

    – hargut
    Jun 11 at 5:19
















Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

– hargut
Jun 10 at 10:42





Good solution path, via iproute2 instead of iptables. This is a great way to handle such situation. For the CIDR matcher suggestion, keep in mind that 0.0.0.0/1 and 128.0.0.0/1 match approx. half the internet, only parts of these ranges are reserved for specific purposes (e.g private networks).

– hargut
Jun 10 at 10:42













Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

– Moth
Jun 10 at 14:30





Thank you for this lightening. What do you mean when you say that it matches approximately half the internet? You want to say that: 1. the other half is for private-purpose, or rather, that 2. it lacks the half of all the IP addresses? (the 2. seems unlikely, I don't think there are IP addresses beyond 255.255.255.255, at any rate with IPv4).

– Moth
Jun 10 at 14:30













The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

– hargut
Jun 10 at 14:54






The calculation of the ranges in your answer is correct 0.0.0.0/1 from 0.0.0.1 to 127.255.255.255 and 128.0.0.0/1 from 128.0.0.1 to 255.255.255. But each of the the two selectors covers (approx.) half of the ipv4 based internet, and both contain private and public ip's in its range (e.g. 10.0.0.0/8, or 172.16.0.0/16, ...). So if you match either 0.0.0.0/1 or 128.0.0.0/1 for routing through vpn-gateway or gateway it seems not very reasonable, still it could be intended when wanting (approx.) half traffic through vpn-gateway and (approx.) the other half through gateway.

– hargut
Jun 10 at 14:54














Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

– Moth
Jun 10 at 20:40






Actually, in my answer both 0.0.0.0/1 and 128.0.0.0/1 are routed through <gateway> and not through <vpn's gateway>. But you are right, I think that <vpn's gateway> and <vpn address> don't have to be routed in the <gateway>, otherwise, the VPN would become unreachable. Am I right?

– Moth
Jun 10 at 20:40














Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

– hargut
Jun 11 at 5:19





Sorry, I've missed the fact that both are routed via the same gateway. In this case a single entry with 0.0.0.0/0 would be more clear.

– hargut
Jun 11 at 5:19

















draft saved

draft discarded
















































Thanks for contributing an answer to Server Fault!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f970661%2fmaking-a-server-behind-a-vpn-client-remain-reachable%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company