<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:微软雅黑;
        panose-1:2 11 5 3 2 2 4 2 2 4;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"\@微软雅黑";
        panose-1:2 11 5 3 2 2 4 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML 预设格式 Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLChar
        {mso-style-name:"HTML 预设格式 Char";
        mso-style-priority:99;
        mso-style-link:"HTML 预设格式";
        font-family:宋体;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=ZH-CN link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>Thanks Darrell, I didn’t receive your second reply, I saw it in mail.openvswitch.org.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>“<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>probably, you should give an example of what you mean by above<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>I am not sure you are meaning to say that you want to specify an L4 port in<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>your<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>snat action rule or not; you will want to use ephemeral ports by not<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>specifying a<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>specific port in most cases<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>“<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>For SNAT, we don’t specify port, just use default port range “1024-65535”), but for internal source IPs, i.e. floating IPs, they are discrete in most cases because some floating IPs needn’t access Internet, for public IPs, so are they. For public IPs, maybe they are from different telecom carriers, we prefer egress traffic can be distributed on several BGP lines.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>table=0,ip,nw_src=172.18.0.67,…,actions=ct(commit,table=0,zone=1,nat(src=220.0.0.3,230.0.0.7,240.0.0.123))<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>table=0,ip,nw_src=172.18.0.80,…,actions=ct(commit,table=0,zone=1,nat(src=220.0.0.3,230.0.0.7,240.0.0.123))<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>table=0,ip,nw_src=172.19.0.23,…,actions=ct(commit,table=0,zone=1,nat(src=220.0.0.3,230.0.0.7,240.0.0.123))<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Ideally, we hope, for different traffic types from the same internal IP (say 172.18.0.67), some can SNAT to 220.0.0.3, some can SNAT to 230.0.0.7, some can SNAT to <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>240.0.0.123, that way, they can leverage total bandwidth of </span><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>several BGP lines.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'>I know current OVS can’t support the above IP list for snat, but it is indeed required in reality, I don’t understand why OVS can’t do in this way, is it linux conntrack limitation or what else reason? I think it is similar to IP range which can be supported.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"微软雅黑",sans-serif'>发件人<span lang=EN-US>:</span></span></b><span lang=EN-US style='font-size:11.0pt;font-family:"微软雅黑",sans-serif'> Darrell Ball [mailto:dlu998@gmail.com] <br></span><b><span style='font-size:11.0pt;font-family:"微软雅黑",sans-serif'>发送时间<span lang=EN-US>:</span></span></b><span lang=EN-US style='font-size:11.0pt;font-family:"微软雅黑",sans-serif'> 2019</span><span style='font-size:11.0pt;font-family:"微软雅黑",sans-serif'>年<span lang=EN-US>11</span>月<span lang=EN-US>6</span>日<span lang=EN-US> 9:38<br></span><b>收件人<span lang=EN-US>:</span></b><span lang=EN-US> Yi Yang (</span>杨燚<span lang=EN-US>)-</span>云服务集团<span lang=EN-US> &lt;yangyi01@inspur.com&gt;<br></span><b>抄送<span lang=EN-US>:</span></b><span lang=EN-US> ovs-discuss@openvswitch.org; ovs-dev@openvswitch.org<br></span><b>主题<span lang=EN-US>:</span></b><span lang=EN-US> Re: [ovs-dev] can OVS conntrack support IP list like this: actions=ct(commit, table=0, zone=1, nat(dst=220.0.0.3, 220.0.0.7, 220.0.0.123))?<o:p></o:p></span></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><div><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><div><div><p class=MsoNormal><span lang=EN-US>On Tue, Nov 5, 2019 at 4:32 PM Yi Yang (</span>杨燚<span lang=EN-US>)-</span>云服务集团<span lang=EN-US> &lt;<a href="mailto:yangyi01@inspur.com">yangyi01@inspur.com</a>&gt; wrote:<o:p></o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>Hi, folks<br><br><br><br>We need to do SNAT for many internal IPs by just using several public IPs,<br>we also need to do DNAT by some other public IPs for exposing webservice,<br>openflow rules look like the below:<br><br><br><br>table=0,ip,nw_src=<a href="http://172.17.0.0/16," target="_blank">172.17.0.0/16,</a>…,actions=ct(commit,table=0,zone=1,nat(src=<br>220.0.0.3,220.0.0.7,220.0.0.123))<br><br>table=0,ip,nw_src=172.18.0.67,…,actions=ct(commit,table=0,zone=1,nat(src=22<br>0.0.0.3,220.0.0.7,220.0.0.123))<o:p></o:p></span></p></blockquote><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>for snat, you can map some subset of private IPs to a given public IP and so on<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>&nbsp;<o:p></o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal><span lang=EN-US>table=0,ip,tcp,nw_dst=220.0.0.11,tp_dst=80,…,actions=ct(commit,table=0,zone<br>=2,nat(dst=<a href="http://172.16.0.100:80" target="_blank">172.16.0.100:80</a>))<br><br>table=0,ip,tcp,nw_dst=220.0.0.11,<br>tp_dst=443,…,actions=ct(commit,table=0,zone=2,nat(dst=<a href="http://172.16.0.100:443" target="_blank">172.16.0.100:443</a>))<o:p></o:p></span></p></blockquote><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>you are mapping 'to' private IPs, so you have control over the range<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal><span lang=EN-US><br><br><br><br><br>From ct document, it seems it can’t support IP list for nat, anybody knows<br>how we can handle such cases in some kind feasible way?<br><br><br><br>In addition, is it ok if multiple openflow rules use the same NAT IP:PORT<br>combination? I’m not sure if it will result in some conflicts for SNAT,<br>because all of them need to do dynamic source port mapping, per my test, it<br>seems this isn’t a problem.<o:p></o:p></span></p></blockquote><div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>IIUC, as long as tuples are unique, it should be fine<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>&nbsp;<o:p></o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal><span lang=EN-US><br><br><br>Thank you all in advance and appreciate your help sincerely.<br><br>_______________________________________________<br>dev mailing list<br><a href="mailto:dev@openvswitch.org" target="_blank">dev@openvswitch.org</a><br><a href="https://mail.openvswitch.org/mailman/listinfo/ovs-dev" target="_blank">https://mail.openvswitch.org/mailman/listinfo/ovs-dev</a><o:p></o:p></span></p></blockquote></div></div></div></body></html>